Класс-построитель SQL-запроса


SQL={}

function SQL:new()
   local props = {
      xselect = '*',
      xfrom = nil,
      xorder = nil
   }
   self.__index = self
   return setmetatable(props, self)
end

function SQL:select(str)
   self.xselect = str
   return self
end

function SQL:from(tab)
  self.xfrom = tab
  return self
end

function SQL:orderby(ord)
  self.xorder=ord
  return self
end

function SQL:make()
  local r=''
  if self.xselect~=nil then
    r = string.format('SELECT %s',self.xselect)
  end
  if self.xfrom~=nil then
    r = r .. string.format(' FROM %s',self.xfrom)
  end
  if self.xorder~=nil then
    r = r .. string.format(' ORDER BY %s',self.xorder)
  end
  return r
end

print( SQL:new():select('f1,f2,f3'):from('table1'):orderby('f1 desc'):make() )
print( SQL:new():select('f1,f2'):from('table1'):make() )


$ SELECT f1,f2,f3 FROM table1 ORDER BY f1 desc
$ SELECT f1,f2 FROM table1