1 module dbal.builder;
2 
3 import dbal;
4 
5 interface SqlBuilder
6 {
7     SqlBuilder from(string tableName,string tableNameAlias = null);
8     SqlBuilder select(T...)(T args)
9 	{
10 		string[] arr;
11 		foreach(arg;args){
12 			arr ~= arg;
13 		}
14 		return selectImpl(arr);
15 	}
16     SqlBuilder selectImpl(string[] args);
17     SqlBuilder insert(string tableName);
18     SqlBuilder update(string tableName);
19     SqlBuilder remove(string tableName);
20     SqlBuilder where(string expression);
21     alias total = count;
22     SqlBuilder count();
23     SqlBuilder having(string expression);
24     SqlBuilder eq(T)(string key,T value)
25 	{
26 		return whereImpl(key,CompareType.eq,value.to!string);
27 	}
28     SqlBuilder ne(T)(string key,T value)
29 	{
30 		return whereImpl(key,CompareType.ne,value.to!string);
31 	}
32     SqlBuilder gt(T)(string key,T value)
33 	{
34 		return whereImpl(key,CompareType.gt,value.to!string);
35 	}
36     SqlBuilder lt(T)(string key,T value)
37 	{
38 		return whereImpl(key,CompareType.lt,value.to!string);
39 	}
40     SqlBuilder ge(T)(string key,T value)
41 	{
42 		return whereImpl(key,CompareType.ge,value.to!string);
43 	}
44     SqlBuilder le(T)(string key,T value)
45 	{
46 		return whereImpl(key,CompareType.le,value.to!string);
47 	}
48     SqlBuilder like(T)(string key,T value)
49 	{
50 		return whereImpl(key,CompareType.like,value.to!string);
51 	}
52     SqlBuilder where(T)(string key,CompareType type,T value)
53 	{
54 		return whereImpl(key,type,value.to!string);
55 	}
56 	SqlBuilder whereImpl(string key,CompareType type,string value);
57     SqlBuilder where(MultiWhereExpression expr);
58     MultiWhereExpression expr();
59     SqlBuilder join(JoinMethod joinMethod,string table,string tablealias,string joinWhere);
60     SqlBuilder join(JoinMethod joinMethod,string table,string joinWhere);
61     SqlBuilder innerJoin(string table,string tablealias,string joinWhere);
62     SqlBuilder innerJoin(string table,string joinWhere);
63     SqlBuilder leftJoin(string table,string tableAlias,string joinWhere);
64     SqlBuilder leftJoin(string table,string joinWhere);
65     SqlBuilder rightJoin(string table,string tableAlias,string joinWhere);
66     SqlBuilder rightJoin(string table,string joinWhere);
67     SqlBuilder fullJoin(string table,string tableAlias,string joinWhere);
68     SqlBuilder fullJoin(string table,string joinWhere);
69     SqlBuilder crossJoin(string table,string tableAlias);
70     SqlBuilder crossJoin(string table);
71     SqlBuilder groupBy(string expression);
72     SqlBuilder orderBy (string key,string order = "DESC");
73     SqlBuilder offset(int offset);
74     SqlBuilder limit(int limit);
75     SqlBuilder values(string[string] arr);
76     SqlBuilder set(string key,string value);
77     SqlBuilder setParameter(int index,string value);
78     
79 	SqlBuilder setAutoIncrease(string key);
80     
81     string tableName();
82     string tableNameAlias();
83     Method method();
84     string[] selectKeys();
85     string having();
86     string groupBy();
87     string orderBy();
88     string order();
89     int limit();
90     int offset();
91     string multiWhereStr();
92     WhereExpression[] whereKeys();
93     ValueExpression[string] values();
94     JoinExpression[] joins();
95 	string getAutoIncrease();
96     
97     SqlSyntax build();
98 }
99