storing binary data in a "memory" database
Brian Milby
brian at milby7.com
Sat Jun 4 09:29:44 EDT 2022
Is this the issue?
To pass binary data in an array element, prepend "*b" to the element's key.
Sent from my iPhone
> On Jun 3, 2022, at 6:56 PM, Bob Sneidar via use-livecode <use-livecode at lists.runrev.com> wrote:
>
> Hi Doc thanks for the response. I am using aes256 encryption so an ascii hash is not viable. If this were a file based sqLite database I could perhaps change the encoding. Maybe I can with a :memory: database too! Here's my code. I have posted this before, it's an incredibly useful handler. If you provide pDBID it will ADD or REPLACE a table in that :memory: database. If you do NOT it will create a NEW :memory: database and return the database ID. The parameter pDBName is misnamed it should probably be pTableName. I'll fix that later.
>
> I suppose what I need is a statement to change the encoding of the database before I create it.
>
> put arrayToSQLite(tPasswordsDataA, ":memory:", "passwords", lMemoryDB) into lMemoryDB
>
> FUNCTION arrayToSQLite pArrayDataA, pDBFile, pDBName, pDBID
> put the keys of pArrayDataA into tArrayKeys
> sort tArrayKeys numeric ascending
> IF pDBFile is empty THEN put ":memory:" into pDBFile
> IF pDBName is empty THEN put "arraydata" into pDBName
>
> TRY
> if pDBID is empty then \
> put revOpenDatabase("sqlite", pDBFile) into pDBID
>
> IF "Error" is in pDBID THEN
> return empty
> END IF
>
> put "drop table " & pDBName into tDropSQL
> revExecuteSQL pDBID, tDropSQL
> put the result into tResult
> CATCH tError
> answer tError
> IF the environment is "development" THEN exit to top ELSE quit
> END TRY
>
> -- create the table
> put "create table" && quote & pDBName & quote \
> & cr into tCreateCommand
> put "(" & quote & "recordid" & quote && "NUMERIC PRIMARY KEY UNIQUE, " \
> & cr AFTER tCreateCommand
>
> put the keys of pArrayDataA [1] into tRecordKeyList
>
> REPEAT for each line tRecordKey in tRecordKeyList
> if pArrayDataA [1] [tRecordKey] is an array or \
> pArrayDataA [1] [tRecordKey] begins with "Salted__" then
> put "BLOB" into tColumnType
> else
> put VARCHAR into tColumnType
> end if
>
> put quote & tRecordKey & quote && tColumnType & "," && cr AFTER tCreateCommand
> END REPEAT
>
> delete char -3 to -1 of tCreateCommand
> put ")" AFTER tCreateCommand
>
> TRY
> revExecuteSQL pDBID, tCreateCommand
> put the result into tResult
> IF tResult is not 0 THEN breakpoint
> CATCH tError
> breakpoint
> END TRY
>
> put 1 into tRecordCounter
> put "recordid" & cr & tRecordKeyList into tColumns
>
> repeat with i = 1 to the number of lines of tColumns
> put ":" & i into item i of tColumnList
> end repeat
>
> put "(" & tColumnList & ")" into tColumnList
>
> -- insert data
> REPEAT for each line tKey in tArrayKeys
> put 1 into tColumnCounter
> put pArrayDataA [tKey] into tRecordDataA
> put tRecordCounter into tQueryDataA [1]
>
> REPEAT for each line tRecordKey in tRecordKeyList
> add 1 to tColumnCounter
>
> if tRecordDataA [tRecordKey] is an array then
> put arrayEncode(tRecordDataA [tRecordKey]) into tValue
> else
> put tRecordDataA [tRecordKey] into tValue
> end if
>
> put tValue into tQueryDataA [tColumnCounter]
> END REPEAT
>
> put "insert into" && pDBName && "VALUES" && tColumnList into tInsertSQL
>
> TRY
> revExecuteSQL pDBID, tInsertSQL, "tQueryDataA"
> put the result into tResult
> if the result is not a number then breakpoint
> CATCH tError
> breakpoint
> END TRY
>
> add 1 to tRecordCounter
> END REPEAT
>
> return pDBID
> END arrayToSQLite
>
>
>> On Jun 3, 2022, at 15:04 , doc hawk via use-livecode <use-livecode at lists.runrev.com> wrote:
>>
>> A couple of lines of code with declarations, storing, and retrieving would probably help.
>>
>>
>> There also might be a UTF issue (which would be beyond me)—a hash should be in good old 6.5 bit ASCII, not something newfangled with eight or more bits.
>>
>>
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list