1 #include "Sql.h"
2
3 namespace Upp {
4
td_scalar(SqlSet & set,const String & prefix,const char * x)5 void td_scalar(SqlSet& set, const String& prefix, const char *x) {
6 set.Cat(SqlId(prefix + x));
7 }
8
td_array(SqlSet & set,const String & prefix,const char * x,int cnt)9 void td_array(SqlSet& set, const String& prefix, const char *x, int cnt) {
10 String name = prefix + x;
11 for(int i = 0; i < cnt; i++)
12 set.Cat(SqlId(name + Format("%d", i)));
13 }
14
td_var(SqlSet & set,const String & prefix,const char * x,SqlSet (* f)(const String &))15 void td_var(SqlSet& set, const String& prefix, const char *x, SqlSet (*f)(const String&)) {
16 set.Cat((*f)(prefix + x + '$'));
17 }
18
td_shrink(String * array,int cnt)19 void td_shrink(String *array, int cnt) {
20 String *lim = array + cnt;
21 while(array < lim) {
22 array->Shrink();
23 array++;
24 }
25 }
26
27 struct NfEqual : FieldOperator {
28 ValueArray va;
29
FieldUpp::NfEqual30 virtual void Field(const char *name, Ref f) {
31 va.Add(f);
32 }
33 };
34
EqualFields(Fields a,Fields b)35 bool EqualFields(Fields a, Fields b)
36 {
37 NfEqual fa, fb;
38 a(fa);
39 b(fb);
40 return fa.table == fb.table && fa.va == fb.va;
41 }
42
43 struct NfAsString : FieldOperator {
44 String text;
45
FieldUpp::NfAsString46 virtual void Field(const char *name, Ref f) {
47 text << "\n\t" << name << '=' << (Value)f;
48 }
49 };
50
51
AsString(Fields a)52 String AsString(Fields a)
53 {
54 NfAsString x;
55 a(x);
56 return x.text;
57 }
58
59 }
60