SQL Insert Syntax
Bob Sneidar
bobsneidar at iotecdigital.com
Fri Jan 5 17:49:29 EST 2018
Hi all.
Here's a new toy for everyone to play with. It takes a numbered array of key/value pairs and converts it to a MEMORY database. Why you ask? So you can query against it of course!
In my particular case I am getting an array of every object on a card EXCLUDING objects that are elements of a datagrid (that would be way too much data for me to care about) so I can query against it. For instance, given one of the columns is the name of the object and I want all the images, I can query for all image records:
select * from arraydata where name LIKE 'image %'
You can see how handy this would be, rather than iterating through every element of an array to find ONLY the array records you want.
Here's the code:
function arrayToMemoryDB aArrayData
put the keys of aArrayData into tArrayKeys
sort tArrayKeys numeric ascending
put ":MEMORY:" into tDBFile
put revOpenDatabase("sqlite", tDBFile) into tDBID
put "drop table arraydata" into tDropSQL
try
revExecuteSQL tDBID, tDropSQL
put the result into tResult
catch tError
end try
-- create the table
put "create table" && quote & "arraydata" & quote & cr \
into tCreateCommand
put "(" & quote & "recordid" & quote && "NUMERIC PRIMARY KEY NOT NULL UNIQUE, " & cr \
after tCreateCommand
put the keys of aArrayData [1] into tRecordKeyList
repeat for each line tRecordKey in tRecordKeyList
put quote & tRecordKey & quote && "VARCHAR, " & cr after tCreateCommand
end repeat
delete char -3 to -1 of tCreateCommand
put ")" after tCreateCommand
try
revExecuteSQL tDBID, tCreateCommand
put the result into tResult
if tResult is not 0 then breakpoint
catch tError
breakpoint
end try
-- insert data
repeat for each line tKey in tArrayKeys
put aArrayData [tKey] into aRecordData
put 1 into tCounter
put "recordid" into item tCounter of tColumns
put ":" & tCounter into item tCounter of tColumnData
put tKey into aColumnData [tCounter]
repeat for each line tRecordKey in tRecordKeyList
add 1 to tCounter
put tRecordKey into item tCounter of tColumns
put ":" & tCounter into item tCounter of tColumnData
put aRecordData [tRecordKey] into aColumnData [tCounter]
end repeat
put "(" & tColumns & ")" into tColumns
put "(" & tColumnData & ")" into tColumnData
put "insert into arraydata" && tColumns && "VALUES" && tColumnData into tInsertSQL
replace quote with "\" & quote in tInsertSQL
replace "'" with quote in tInsertSQL
try
revExecuteSQL tDBID, tInsertSQL, "aColumnData"
put the result into tResult
if tResult is not 1 then breakpoint
catch tError
breakpoint
end try
end repeat
return tDBID
end arrayToMemoryDB
More information about the use-livecode
mailing list