Multiple Line SQL for MySQL?

Peter Reid preid at reidit.co.uk
Tue Mar 29 04:26:47 EST 2005


Hi Sarah

Thanks for the response below.  In the end, I had done something similar:

function execSQLsequence dbID,dbSQL
   -- execute a sequence of SQL commands
   put unwrappedSQL(dbSQL) into theSQL
   repeat for each line i in theSQL
     revExecuteSQL dbID, i
     put the result into theResult
     if theResult is not a number then
       return theResult
     end if
   end repeat
   return empty
end execSQLsequence

function unwrappedSQL wrapped
   -- ignore blank & comment lines, unwrap multiple lines into single lines
   put empty into unwrapped
   put empty into thisCmd
   repeat for each line i in wrapped
     if i is not empty and char 1 to 2 of i is not "--" then
       put trimmed(i) after thisCmd
       if last char of i = ";" then
         put thisCmd & return after unwrapped
         put empty into thisCmd
       end if
     else
       put i & return after unwrapped
     end if
   end repeat
   if thisCmd is not empty then
     put thisCmd & return after unwrapped
   end if
   return unwrapped
end unwrappedSQL

function trimmed theText
   -- remove leading & trailing spaces
   put 1 into startCh
   put length(theText) into lenText
   put lenText into endCh
   repeat for each char c in theText
     if c <> space then
       exit repeat
     end if
     add 1 to startCh
   end repeat
   repeat with c = lenText to startCh step -1
     if char c of theText <> space then
       put c into endCh
       exit repeat
     end if
   end repeat
   return char startCh to endCh of theText
end trimmed

The "execSQLsequence" function can be used with a dump file produced 
by phpMySQL or mysqldump to reload a database or individual tables.

Cheers

Peter

>Here is a segment of the handler I use for restoring data to MySQL. 
>This takes the file produced by mysqldump and re-instates it. 
>tRestore is a variable containing the text data.
>
>   repeat
>     get offset(";" & cr, tRestore)
>     if it = 0 then exit repeat
>     put char 1 to it of tRestore into tSQL
>     delete char 1 to it of tRestore
>
>     get doSQLexecute(tSQL, tID)
>     if it is not a number then
>       answer error "Error restoring from backup." & cr & it & cr & 
>tSQL as sheet
>       exit to top
>     end if
>   end repeat
>
>I have a doSQLexecute function that is just a wrapper for the 
>revExecuteSQL command. I realize that you didn't want to have to do 
>this, but it is really quite fast.
>
>HTH,
>Sarah

-- 
Peter Reid
Reid-IT Limited, Loughborough, Leics., UK
E-mail: preid at reidit.co.uk


More information about the use-livecode mailing list