Project

General

Profile

1
# SQL code generation
2

    
3
import sql
4

    
5
class Code:
6
    def to_str(self, db): raise NotImplemented()
7

    
8
class Literal:
9
    def __init__(self, value): self.value = value
10
    
11
    def to_str(self, db): return db.esc_value(self.value)
12

    
13
class Table(Code):
14
    def __init__(self, name, schema=None):
15
        '''
16
        @param schema str|None (for no schema)
17
        '''
18
        self.name = name
19
        self.schema = schema
20
    
21
    def to_str(self, db): return sql.qual_name(db, self.schema, self.name)
22

    
23
class Col(Code):
24
    def __init__(self, name, table=None):
25
        '''
26
        @param table Table|None (for no table)
27
        '''
28
        assert table == None or isinstance(table, Table)
29
        
30
        self.name = name
31
        self.table = table
32
    
33
    def to_str(self, db):
34
        str_ = ''
35
        if self.table != None: str_ += self.table.to_str(db)+'.'
36
        str_ += sql.esc_name(db, self.name)
37
        return str_
38

    
39
class ValueCond:
40
    def __init__(self, value):
41
        if not isinstance(value, Literal): value = Literal(value)
42
        
43
        self.value = value
44
    
45
    def to_str(self, db, value_code):
46
        '''
47
        @param value_code The SQL code that the condition is being applied on
48
        '''
49
        raise NotImplemented()
50

    
51
class CompareCond(ValueCond):
52
    def __init__(self, value, operator='='):
53
        ValueCond.__init__(self, value)
54
        self.operator = operator
55
    
56
    def to_str(self, db, value_code):
57
        return value_code+' '+self.operator+' '+self.value.to_str(db)
(23-23/34)