storing binary data in a "memory" database

Bob Sneidar bobsneidar at iotecdigital.com
Sun Jun 5 19:58:42 EDT 2022


Oooh that may do it. I’ll try when I get the chance. 

Sent from my iPhone

> On Jun 4, 2022, at 06:31, Brian Milby via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> 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
> _______________________________________________
> 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