[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: SQL syntax in Lua?
- From: PA <petite.abeille@...>
- Date: Wed, 8 Mar 2006 18:30:55 +0100
On Mar 08, 2006, at 18:05, Tomas wrote:
And( Where( 'id', '>', 0 ), Where( 'id', '<', 10 ) )
Correct me if I'm wrong, but I think the above code will
produce the string:
"where id > 0 and id < 10"
Am I correct?
Yes. Assuming it's 'rendered' to a SQL database of some sort.
Alternatively, it could get evaluated in memory:
function self:evaluate( anObject )
local someConditions = self:conditions()
if someConditions ~= nil then
if someConditions:hasData() == true then
for _, aCondition in someConditions:iterator()
do
if aCondition:evaluate( anObject ) ==
false then
return false
end
end
return true
end
error( ( "%s.evaluate: empty conditions" ):format(
self:className() ) )
end
error( ( "%s.evaluate: nil conditions" ):format(
self:className() ) )
end
Where 'aCondition:evaluate()' might look like the following:
function self:evaluate( anObject )
local aKey = self:key()
if aKey ~= nil then
local anOperator = self:operator()
if anOperator ~= nil then
local anOperation = self:operations()[
anOperator ]
if anOperation ~= nil then
local anObjectValue = anObject
if LUObject:isObject( anObject ) ==
true then
anObjectValue =
anObject:invoke( aKey )
end
return anOperation( anObjectValue,
self:value() )
end
error( ( "%s.evaluate: unknown operator %q"
):format( self:className(), anOperator ) )
end
error( ( "%s.evaluate: nil operator" ):format(
self:className() ) )
end
error( ( "%s.evaluate: nil key" ):format( self:className() ) )
end
Where 'anOperation' might be something like this:
local function GreaterThan( aValue, anotherValue )
if aValue ~= nil and anotherValue ~= nil then
return aValue > anotherValue
end
return false
end
Some years ago we start an effort in that direction but it
fails on this kind of stuff.
I see.
Now we changed that approach to a set of
functions to solve the most common cases, like:
sql.select (table_name, fields_list, optional_where, optional_extra)
The word 'where' is added automatically if optional_where is
given; optional_extra if given, is added to the end of the statement.
This solution does not solve all problems, but the most common cases.
We also have other functions to other common SQL statements (delete,
insert and update; these last two functions receive tables representing
pairs of field = value). If someone is interested, we can share our
code.
What I really would like to figure out is a way to "naturally" express
a "structured query" in plain Lua. Once I have such a structure, I can
then choose to resolve it against a database or in memory or wherever
it might make sense.
Cheers
--
PA, Onnay Equitursay
http://alt.textdrive.com/