110 lines
3.1 KiB
Plaintext
110 lines
3.1 KiB
Plaintext
Compile function SQL_Format(Value, Conversion, Aux)
|
|
|
|
/*****************************************************************************\
|
|
To keep from having to copy/paste conversion logic everywhere, all logic
|
|
needed to correctly format data for use within SQL is in this format
|
|
routine. This includes wrapping the data in quotes when and if
|
|
appropriate.
|
|
|
|
In all cases, when InVal is null, null is returned without any changes.
|
|
This helps the SQL transfer system better identify fields that are being
|
|
omitted.
|
|
|
|
History
|
|
-------
|
|
04/06/2010 KRF Original Programmer
|
|
09/12/2012 KRF Fixed DATETIME formatting
|
|
\*****************************************************************************/
|
|
|
|
If Assigned(Aux) else Aux = ""
|
|
|
|
// Copy the value so we don't trash it
|
|
ReturnVal = ""
|
|
|
|
// If we have a value, jump to the appropriate conversion
|
|
If Len(Value) then
|
|
|
|
Conversions = "BIT,DATE,DATETIME,DEC,INT,STR,TIME"
|
|
Locate Conversion in Conversions by "AL" using "," setting Pos then
|
|
|
|
If Conversion EQ "STR" AND Assigned(Aux) then
|
|
If Aux EQ 1 then
|
|
Swap @VM with \0D0A\ in Value
|
|
Swap @SVM with \0D0A\ in Value
|
|
end
|
|
end
|
|
|
|
ValuePos = 1
|
|
LenValue = Len(Value)
|
|
Loop
|
|
WorkingValue = Value[ValuePos, @VM]
|
|
ValuePos = Col2() + 1
|
|
On Pos GoSub BIT, DATE, DATETIME, DEC, INT, STR, TIME
|
|
ReturnVal := Ans:@VM
|
|
Until ValuePos GT LenValue
|
|
Repeat
|
|
ReturnVal[-1, 1] = ""
|
|
|
|
end
|
|
|
|
end else
|
|
|
|
If Conversion NE "BIT" AND Conversion NE "INT" AND Conversion NE "DEC" then
|
|
ReturnVal = "''"
|
|
end
|
|
|
|
end
|
|
|
|
Return ReturnVal
|
|
|
|
// BIT types must be 1 or 0, so this just makes sure we don't have anything other than that
|
|
BIT:
|
|
If (WorkingValue NE 0 AND WorkingValue NE "") then
|
|
Ans = -1
|
|
end else
|
|
Ans = 0
|
|
end
|
|
return
|
|
|
|
// DATE types must be in the format YYYY-MM-DD and are quoted
|
|
DATE:
|
|
Ans = "'":OConv(WorkingValue, "D4-J"):"'"
|
|
return
|
|
|
|
// DATETIME types must be in the format YYYY-MM-DD HH:MM:SS and are quoted
|
|
DATETIME:
|
|
Ans = "'":OConv(WorkingValue, "DTJ-^S"):"'"
|
|
return
|
|
|
|
// DEC are quoted and must have decimal positions specified
|
|
DEC:
|
|
If WorkingValue then
|
|
Swap "," with "" in WOrkingValue
|
|
If Len(Aux) then
|
|
Ans = "'":OConv(WorkingValue, "MD":Aux):"'"
|
|
end else
|
|
Ans = "'":WorkingValue"'"
|
|
end
|
|
end else
|
|
Ans = ""
|
|
end
|
|
return
|
|
|
|
// INT types are not quoted and can remain as-is (but we'll trim spaces out, incase of all blanks)
|
|
INT:
|
|
Convert Char(9):" " to "" in WorkingValue
|
|
Ans = WorkingValue
|
|
return
|
|
|
|
// STR types need to be quotes, apostrophies need to be escaped, and delimiters need to be dealt with
|
|
STR:
|
|
Swap @TM with \0D0A\ in WorkingValue
|
|
Swap "'" with "''" in WorkingValue
|
|
Ans = "'":WorkingValue:"'"
|
|
return
|
|
|
|
// TIME types must be in the format HH:MM:SS and are quoted
|
|
TIME:
|
|
Ans = "'":OConv(WorkingValue, "MTS"):"'"
|
|
return
|