My favorites | Sign in
Project Home Downloads Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "Sql.h"

NAMESPACE_UPP

SqlSet operator|(const SqlSet& s1, const SqlSet& s2) {
if(s1.IsEmpty()) return s2;
if(s2.IsEmpty()) return s1;
return SqlSet(s1(SqlSet::SET, ~SQLITE3) + " union " + s2(SqlSet::SET, ~SQLITE3), SqlSet::SETOP);
}

SqlSet operator&(const SqlSet& s1, const SqlSet& s2) {
if(s1.IsEmpty()) return s2;
if(s2.IsEmpty()) return s1;
return SqlSet(s1(SqlSet::SET, ~SQLITE3) + " intersect " + s2(SqlSet::SET, ~SQLITE3), SqlSet::SETOP);
}

SqlSet operator-(const SqlSet& s1, const SqlSet& s2) {
if(s1.IsEmpty() || s2.IsEmpty())
return s1;
return SqlSet(s1(SqlSet::SET) + SqlCase(MSSQL|PGSQL|SQLITE3, " except ")(" minus ") + s2(SqlSet::SET), SqlSet::SETOP);
}

String SqlSet::operator~() const {
if(IsEmpty()) return "null";
return text;
}

String SqlSet::operator()() const {
if(IsEmpty()) return "null";
return '(' + text + ')';
}

String SqlSet::operator()(int at) const {
if(IsEmpty()) return "null";
return at > priority ? '(' + text + ')' : text;
}

String SqlSet::operator()(int at, byte cond) const {
if(IsEmpty()) return "null";
if(at <= priority)
return text;
StringBuffer out;
out << SqlCase(cond, "(")() << text << SqlCase(cond, ")")();
return out;
}

SqlSet& SqlSet::Cat(const SqlVal& val) {
if(!IsEmpty()) text.Cat(", ");
text.Cat(~val);
priority = SET;
return *this;
}

SqlSet& SqlSet::Cat(const SqlSet& set) {
if(set.IsEmpty()) return *this;
if(!IsEmpty()) text.Cat(", ");
text.Cat(set.text);
priority = SET;
return *this;
}

SqlSet::SqlSet(const SqlVal& p0) {
Cat(p0);
priority = SET;
}

static inline void sCat(SqlSet& s, SqlVal v) { s.Cat(v); }

#define E__Cat(I) sCat(*this, p##I)

#define E__SqlSetF(I) \
SqlSet::SqlSet(const SqlVal& p0, __List##I(E__SqlVal)) { \
Cat(p0); \
__List##I(E__Cat); \
priority = SET; \
}
__Expand(E__SqlSetF);

FieldOperator::FieldOperator() {}
FieldOperator::~FieldOperator() {}

struct FieldSqlSet : FieldOperator {
SqlSet *set;

virtual void Field(const char *name, Ref) {
set->Cat(SqlId(name));
}
};

SqlSet::SqlSet(Fields nfields) {
FieldSqlSet fo;
fo.set = this;
nfields(fo);
priority = SET;
}

void FieldDumper::Field(const char *name, Ref f)
{
if(!s.IsEmpty())
s.Cat(", ");
s << name << " = " << Value(f);
}

END_UPP_NAMESPACE

Change log

r4276 by cxl on Dec 8, 2011   Diff
Core: Id is now String based, Sql: SqlCol
erradicated
Go to: 
Project members, sign in to write a code review

Older revisions

r2312 by rylek on Apr 7, 2010   Diff
.Sql: minor Sqlite3-related hackery in
SqlExp
+Draw: new RGBA blit functions
TransformComponents /
MultiplyComponents
r1896 by rylek on Jan 15, 2010   Diff
Minor priority-related fixes in SqlExp
r1881 by rylek on Jan 12, 2010   Diff
Minor Sqlite-related fixes and
improvements; new helper
HttpContentDisposition to simplify
generation of http response headers
All revisions of this file

File info

Size: 2259 bytes, 104 lines

File properties

svn:eol-style
native
Powered by Google Project Hosting