예제 #1
0
 def __sqlrepr__(self, db):
     escape = self.escape
     like = "%s %s (%s)" % (sqlrepr(self.expr, db), self.op, sqlrepr(self.string, db))
     if escape is None:
         return "(%s)" % like
     else:
         return "(%s ESCAPE %s)" % (like, sqlrepr(escape, db))
예제 #2
0
 def __sqlrepr__(self, db):
     s1 = sqlrepr(self.expr1, db)
     s2 = sqlrepr(self.expr2, db)
     if s1[0] != '(' and s1 != 'NULL':
         s1 = '(' + s1 + ')'
     if s2[0] != '(' and s2 != 'NULL':
         s2 = '(' + s2 + ')'
     return "(%s %s %s)" % (s1, self.op, s2)
예제 #3
0
 def __sqlrepr__(self, db):
     s1 = sqlrepr(self.expr1, db)
     s2 = sqlrepr(self.expr2, db)
     if s1[0] != "(" and s1 != "NULL":
         s1 = "(" + s1 + ")"
     if s2[0] != "(" and s2 != "NULL":
         s2 = "(" + s2 + ")"
     return "(%s %s %s)" % (s1, self.op, s2)
예제 #4
0
 def __sqlrepr__(self, db):
     if not self.valueList:
         return ''
     insert = "INSERT INTO %s" % self.table
     allowNonDict = True
     template = self.template
     if template is NoDefault and type(self.valueList[0]) is type({}):
         template = self.valueList[0].keys()
         allowNonDict = False
     if template is not NoDefault:
         insert += " (%s)" % ", ".join(template)
     first = True
     insert += " VALUES "
     for value in self.valueList:
         if first:
             first = False
         else:
             insert += ", "
         if type(value) is type({}):
             if template is NoDefault:
                 raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value)
             value = dictToList(template, value)
         elif not allowNonDict:
             raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value)
         insert += "(%s)" % ", ".join([sqlrepr(v, db) for v in value])
     return insert
예제 #5
0
 def __sqlrepr__(self, db):
     if self.proxy.soClass is None:
         return '_DELAYED_' + self.attr
     val = self._resolve()
     if isinstance(val, SQLExpression):
         val = sqlrepr(val, db)
     return val
예제 #6
0
 def __sqlrepr__(self, db):
     s = sqlrepr(self.expr, db)[1:-1] # remove quotes
     if db in ('postgres', 'mysql'):
         s = s.replace('%', '\\%')
     else:
         s = s.replace('%', '%%')
     return "'%s%s%s'" % (self.prefix, s, self.postfix)
예제 #7
0
 def __sqlrepr__(self, db):
     if not self.valueList:
         return ''
     insert = "INSERT INTO %s" % self.table
     allowNonDict = True
     template = self.template
     if template is NoDefault and type(self.valueList[0]) is type({}):
         template = self.valueList[0].keys()
         allowNonDict = False
     if template is not NoDefault:
         insert += " (%s)" % ", ".join(template)
     first = True
     insert += " VALUES "
     for value in self.valueList:
         if first:
             first = False
         else:
             insert += ", "
         if type(value) is type({}):
             if template is NoDefault:
                 raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value)
             value = dictToList(template, value)
         elif not allowNonDict:
             raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(value)
         insert += "(%s)" % ", ".join([sqlrepr(v, db) for v in value])
     return insert
예제 #8
0
 def __sqlrepr__(self, db):
     if not self.valueList:
         return ''
     insert = "INSERT INTO %s" % self.table
     allowNonDict = True
     template = self.template
     if (template is NoDefault) and isinstance(self.valueList[0], dict):
         template = self.valueList[0].keys()
         allowNonDict = False
     if template is not NoDefault:
         insert += " (%s)" % ", ".join(template)
     insert += " VALUES "
     listToJoin = []
     listToJoin_app = listToJoin.append
     for value in self.valueList:
         if isinstance(value, dict):
             if template is NoDefault:
                 raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(
                     value)
             value = dictToList(template, value)
         elif not allowNonDict:
             raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(
                 value)
         listToJoin_app("(%s)" % ", ".join([sqlrepr(v, db) for v in value]))
     insert = "%s%s" % (insert, ", ".join(listToJoin))
     return insert
예제 #9
0
 def __sqlrepr__(self, db):
     if not self.valueList:
         return ""
     insert = "INSERT INTO %s" % self.table
     allowNonDict = True
     template = self.template
     if (template is NoDefault) and isinstance(self.valueList[0], dict):
         template = list(sorted(self.valueList[0].keys()))
         allowNonDict = False
     if template is not NoDefault:
         insert += " (%s)" % ", ".join(template)
     insert += " VALUES "
     listToJoin = []
     listToJoin_app = listToJoin.append
     for value in self.valueList:
         if isinstance(value, dict):
             if template is NoDefault:
                 raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(
                     value
                 )
             value = dictToList(template, value)
         elif not allowNonDict:
             raise TypeError, "You can't mix non-dictionaries with dictionaries in an INSERT if you don't provide a template (%s)" % repr(
                 value
             )
         listToJoin_app("(%s)" % ", ".join([sqlrepr(v, db) for v in value]))
     insert = "%s%s" % (insert, ", ".join(listToJoin))
     return insert
예제 #10
0
 def __sqlrepr__(self, db):
     whereClause = self.whereClause
     if whereClause is None:
         return "DELETE FROM %s" % self.table
     if isinstance(whereClause, SQLExpression):
         whereClause = sqlrepr(whereClause, db)
     return "DELETE FROM %s WHERE %s" % (self.table, whereClause)
예제 #11
0
 def tablesUsedSet(self, db):
     tables = set()
     for table in self.tablesUsedImmediate():
         if hasattr(table, '__sqlrepr__'):
             table = sqlrepr(table, db)
         tables.add(table)
     for component in self.components():
         tables.update(tablesUsedSet(component, db))
     return tables
예제 #12
0
 def __sqlrepr__(self, db):
     s = self.expr
     if isinstance(s, SQLExpression):
         values = []
         if self.prefix:
             values.append("'%s'" % self.prefix)
         s = _quote_like_special(sqlrepr(s, db), db)
         values.append(s)
         if self.postfix:
             values.append("'%s'" % self.postfix)
         if db == "mysql":
             return "CONCAT(%s)" % ", ".join(values)
         else:
             return " || ".join(values)
     elif isinstance(s, basestring):
         s = _quote_like_special(sqlrepr(s, db)[1:-1], db)
         return "'%s%s%s'" % (self.prefix, s, self.postfix)
     else:
        raise TypeError, "expected str, unicode or SQLExpression, got %s" % type(s)
예제 #13
0
 def __sqlrepr__(self, db):
     update = "%s %s" % (self.sqlName(), self.table)
     update += " SET"
     first = True
     if self.template is not NoDefault:
         for i in range(len(self.template)):
             if first:
                 first = False
             else:
                 update += ","
             update += " %s=%s" % (self.template[i], sqlrepr(self.values[i], db))
     else:
         for key, value in self.values.items():
             if first:
                 first = False
             else:
                 update += ","
             update += " %s=%s" % (key, sqlrepr(value, db))
     if self.whereClause is not NoDefault:
         update += " WHERE %s" % sqlrepr(self.whereClause, db)
     return update
예제 #14
0
    def __sqlrepr__(self, db):
        select = "SELECT %s" % ", ".join([sqlrepr(v, db) for v in self.items])

        tables = {}
        things = self.items
        if self.whereClause is not NoDefault:
            things.append(self.whereClause)
        for thing in things:
            if isinstance(thing, SQLExpression):
                tables.update(tablesUsedDict(thing))
        tables = tables.keys()
        if tables:
            select += " FROM %s" % ", ".join(tables)

        if self.whereClause is not NoDefault:
            select += " WHERE %s" % sqlrepr(self.whereClause, db)
        if self.groupBy is not NoDefault:
            select += " GROUP BY %s" % sqlrepr(self.groupBy, db)
        if self.having is not NoDefault:
            select += " HAVING %s" % sqlrepr(self.having, db)
        if self.orderBy is not NoDefault:
            select += " ORDER BY %s" % sqlrepr(self.orderBy, db)
        if self.limit is not NoDefault:
            select += " LIMIT %s" % sqlrepr(self.limit, db)
        return select
예제 #15
0
    def __sqlrepr__(self, db):
        select = "SELECT %s" % ", ".join([sqlrepr(v, db) for v in self.items])

        tables = {}
        things = self.items
        if self.whereClause is not NoDefault:
            things.append(self.whereClause)
        for thing in things:
            if isinstance(thing, SQLExpression):
                tables.update(tablesUsedDict(thing))
        tables = tables.keys()
        if tables:
            select += " FROM %s" % ", ".join(tables)

        if self.whereClause is not NoDefault:
            select += " WHERE %s" % sqlrepr(self.whereClause, db)
        if self.groupBy is not NoDefault:
            select += " GROUP BY %s" % sqlrepr(self.groupBy, db)
        if self.having is not NoDefault:
            select += " HAVING %s" % sqlrepr(self.having, db)
        if self.orderBy is not NoDefault:
            select += " ORDER BY %s" % sqlrepr(self.orderBy, db)
        if self.limit is not NoDefault:
            select += " LIMIT %s" % sqlrepr(self.limit, db)
        return select
예제 #16
0
파일: sqlbuilder.py 프로젝트: fregaham/DISP
 def __sqlrepr__(self, db):
     if self.on_condition:
         on_condition = self.on_condition
         if hasattr(on_condition, "__sqlrepr__"):
             on_condition = sqlrepr(on_condition, db)
         join = "%s %s ON %s" % (self.op, self.table2, on_condition)
         if self.table1:
             join = "%s %s" % (self.table1, join)
         return join
     elif self.using_columns:
         using_columns = []
         for col in self.using_columns:
             if hasattr(col, "__sqlrepr__"):
                 col = sqlrepr(col, db)
             using_columns.append(col)
         using_columns = ", ".join()
         join = "%s %s USING (%s)" % (self.op, self.table2, using_columns)
         if self.table1:
             join = "%s %s" % (self.table1, join)
         return join
     else:
         RuntimeError, "Impossible error"
예제 #17
0
 def __sqlrepr__(self, db):
     s = self.expr
     if isinstance(s, SQLExpression):
         values = []
         if self.prefix:
             values.append("'%s'" % self.prefix)
         s = _quote_percent(sqlrepr(s, db), db)
         values.append(s)
         if self.postfix:
             values.append("'%s'" % self.postfix)
         if db == "mysql":
             return "CONCAT(%s)" % ", ".join(values)
         else:
             return " || ".join(values)
     else: # assuming s is a string
         s = _quote_percent(s, db)
         return "'%s%s%s'" % (self.prefix, s, self.postfix)
예제 #18
0
    def __sqlrepr__(self, db):
        select = "SELECT %s" % ", ".join([sqlrepr(v, db) for v in self.items])

        join = []
        if self.join is not NoDefault:
            if isinstance(self.join, SQLJoin):
                join.append(self.join)
            else:
                join.extend(self.join)
        tables = {}
        things = list(self.items)
        if self.whereClause is not NoDefault:
            things.append(self.whereClause)
        for thing in things:
            if isinstance(thing, SQLExpression):
                tables.update(tablesUsedDict(thing))
        for j in join:
            if j.table1 in tables: del tables[j.table1]
            if j.table2 in tables: del tables[j.table2]
        tables = tables.keys()
        if tables:
            select += " FROM %s" % ", ".join(tables)
        elif join:
            select += " FROM "
        for j in join:
            if tables and j.table1:
                sep = ", "
            else:
                sep = " "
            select += sep + sqlrepr(j, db)

        if self.whereClause is not NoDefault:
            select += " WHERE %s" % sqlrepr(self.whereClause, db)
        if self.groupBy is not NoDefault:
            groupBy = sqlrepr(self.groupBy, db)
            if isinstance(self.groupBy, list) or isinstance(self.groupBy, tuple):
                groupBy = groupBy[1:-1] # Remove parens
            select += " GROUP BY %s" % groupBy
        if self.having is not NoDefault:
            select += " HAVING %s" % sqlrepr(self.having, db)
        if self.orderBy is not NoDefault:
            orderBy = sqlrepr(self.orderBy, db)
            if isinstance(self.orderBy, list) or isinstance(self.orderBy, tuple):
                orderBy = orderBy[1:-1] # Remove parens
            select += " ORDER BY %s" % orderBy
        if self.limit is not NoDefault:
            select += " LIMIT %s" % sqlrepr(self.limit, db)
        return select
예제 #19
0
 def __sqlrepr__(self, db):
     if self.on_condition:
         on_condition = self.on_condition
         if hasattr(on_condition, "__sqlrepr__"):
             on_condition = sqlrepr(on_condition, db)
         join = "%s %s ON %s" % (self.op, sqlrepr(self.table2, db), on_condition)
         if self.table1:
             join = "%s %s" % (sqlrepr(self.table1, db), join)
         return join
     elif self.using_columns:
         using_columns = []
         for col in self.using_columns:
             if hasattr(col, "__sqlrepr__"):
                 col = sqlrepr(col, db)
             using_columns.append(col)
         using_columns = ", ".join(using_columns)
         join = "%s %s USING (%s)" % (self.op, sqlrepr(self.table2, db), using_columns)
         if self.table1:
             join = "%s %s" % (sqlrepr(self.table1, db), join)
         return join
     else:
         RuntimeError, "Impossible error"
예제 #20
0
    def __sqlrepr__(self, db):

        select = "SELECT"
        if self.ops['distinct']:
            select += " DISTINCT"
            if self.ops['distinctOn'] is not NoDefault:
                select += " ON(%s)" % sqlrepr(self.ops['distinctOn'], db)
        if not self.ops['lazyColumns']:
            select += " %s" % ", ".join([str(sqlrepr(v, db)) for v in self.ops['items']])
        else:
            select += " %s" % sqlrepr(self.ops['items'][0], db)

        join = []
        join_str = ''
        if self.ops['join'] is not NoDefault and self.ops['join'] is not None:
            _join = self.ops['join']
            if isinstance(_join, str):
                join_str = " " + _join
            elif isinstance(_join, SQLJoin):
                join.append(_join)
            else:
                join.extend(_join)
        tables = set()
        for x in self.ops['staticTables']:
            if isinstance(x, SQLExpression):
                x = sqlrepr(x, db)
            tables.add(x)
        things = list(self.ops['items']) + join
        if self.ops['clause'] is not NoDefault:
            things.append(self.ops['clause'])
        for thing in things:
            if isinstance(thing, SQLExpression):
                tables.update(tablesUsedSet(thing, db))
        for j in join:
            t1, t2 = sqlrepr(j.table1, db), sqlrepr(j.table2, db)
            if t1 in tables: tables.remove(t1)
            if t2 in tables: tables.remove(t2)
        if tables:
            select += " FROM %s" % ", ".join(tables)
        elif join:
            select += " FROM"
        tablesYet = tables
        for j in join:
            if tablesYet and j.table1:
                sep = ", "
            else:
                sep = " "
            select += sep + sqlrepr(j, db)
            tablesYet = True

        if join_str:
            select += join_str

        if self.ops['clause'] is not NoDefault:
            select += " WHERE %s" % sqlrepr(self.ops['clause'], db)
        if self.ops['groupBy'] is not NoDefault:
            groupBy = sqlrepr(self.ops['groupBy'], db)
            if isinstance(self.ops['groupBy'], (list, tuple)):
                groupBy = groupBy[1:-1] # Remove parens
            select += " GROUP BY %s" % groupBy
        if self.ops['having'] is not NoDefault:
            select += " HAVING %s" % sqlrepr(self.ops['having'], db)
        if self.ops['orderBy'] is not NoDefault and self.ops['orderBy'] is not None:
            orderBy = self.ops['orderBy']
            if self.ops['reversed']:
                reverser = DESC
            else:
                reverser = lambda x: x
            if isinstance(orderBy, (list, tuple)):
                select += " ORDER BY %s" % ", ".join([sqlrepr(reverser(x), db) for x in orderBy])
            else:
                select += " ORDER BY %s" % sqlrepr(reverser(orderBy), db)
        start, end = self.ops['start'], self.ops['end']
        if self.ops['limit'] is not NoDefault:
            end = start + self.ops['limit']
        if start or end:
            from dbconnection import dbConnectionForScheme
            select = dbConnectionForScheme(db)._queryAddLimitOffset(select, start, end)
        if self.ops['forUpdate']:
            select += " FOR UPDATE"
        return select
예제 #21
0
 def __sqlrepr__(self, db):
     return " UNION ".join([str(sqlrepr(t, db)) for t in self.tables])
예제 #22
0
 def __sqlrepr__(self, db):
     return sqlrepr(self.q, db)
예제 #23
0
 def __sqlrepr__(self, db):
     return "%s %s %s" % (sqlrepr(self.tableName, db), self.as_string, self.alias)
예제 #24
0
 def __sqlrepr__(self, db):
     fieldName = self.fieldName
     if isinstance(fieldName, SQLExpression):
         fieldName = sqlrepr(fieldName, db)
     return self.alias + "." + fieldName
예제 #25
0
 def __sqlrepr__(self, db):
     if isinstance(self.expr, DESC):
         return sqlrepr(self.expr.expr, db)
     return '%s DESC' % sqlrepr(self.expr, db)
예제 #26
0
 def __sqlrepr__(self, db):
     return "%s%s" % (sqlrepr(self.expr, db), sqlrepr(self.args, db))
예제 #27
0
 def getExpression(self, desc, db):
     if isinstance(desc['expression'], str):
         return desc['expression']
     else:
         return sqlrepr(desc['expression'], db)
예제 #28
0
 def __sqlrepr__(self, db):
     return "%s (%s)" % (self.op, sqlrepr(self.subquery, db))
예제 #29
0
 def __sqlrepr__(self, db):
     if db == 'sqlite':
         return SQLOp.__sqlrepr__(self, db)
     s1 = sqlrepr(self.expr1, db)
     s2 = sqlrepr(self.expr2, db)
     return "MOD(%s, %s)" % (s1, s2)
예제 #30
0
def _str_or_sqlrepr(expr, db):
    if isinstance(expr, basestring):
        return expr
    return sqlrepr(expr, db)
예제 #31
0
 def __sqlrepr__(self, db):
     return "%s %s" % (self.prefix, sqlrepr(self.expr, db))
예제 #32
0
 def __sqlrepr__(self, db):
     if self.whereClause is None:
         return "DELETE FROM %s" % self.table
     return "DELETE FROM %s WHERE %s" \
            % (self.table, sqlrepr(self.whereClause, db))
예제 #33
0
 def __sqlrepr__(self, db):
     if isinstance(self.tableName, str):
         return self.tableName
     return sqlrepr(self.tableName, db)
예제 #34
0
 def __sqlrepr__(self, db):
     return "%s %s %s" % (sqlrepr(self.expr1, db), self.op, sqlrepr(self.expr2, db))
예제 #35
0
 def sqlrepr(self, v):
     return sqlrepr(v, self.dbName)
예제 #36
0
 def __sqlrepr__(self, db):
     if self.table1:
         return "%s%s %s" % (sqlrepr(self.table1, db), self.op, sqlrepr(self.table2, db))
     else:
         return "%s %s" % (self.op, sqlrepr(self.table2, db))
예제 #37
0
 def __sqlrepr__(self, db):
     return "(%s %s (%s))" % (
         sqlrepr(self.expr, db), self._get_op(db), sqlrepr(self.string, db)
     )