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