27 {
29
30 std::string infile( "$(RDBMODELROOT)/xml/calib_test.xml" );
31
33
36
37
38 int errcode = man->
build();
39
40 if ( errcode )
41 {
42 std::cerr << "Build failed with error code " << errcode << std::endl;
43 return errcode;
44 }
46
48
54
56 std::vector<FieldVal> oldFields;
57 oldFields.reserve( 10 );
58 oldFields.push_back( FieldVal( "proc_level", "PROD", false ) );
59 oldFields.push_back( FieldVal( "calib_type", "CAL_Ped", false ) );
60 oldFields.push_back( FieldVal( "ser_no", "17", false ) );
61 oldFields.push_back( FieldVal( "completion", "OK", false ) );
62 oldFields.push_back( FieldVal( "prod_start", "", true ) );
63
66
67 bool checkOld = a->
verify( oldRow1, toBeRow );
68
69 std::cout << "Result of verifying 'maySupersede' against oldRow1: " << checkOld << std::endl
70 << std::endl;
71
72 oldFields.clear();
73 oldFields.push_back( FieldVal( "proc_level", "DEV", false ) );
74 oldFields.push_back( FieldVal( "calib_type", "CAL_Ped", false ) );
75 oldFields.push_back( FieldVal( "ser_no", "17", false ) );
76 oldFields.push_back( FieldVal( "completion", "OK", false ) );
77
79
80 checkOld = a->
verify( oldRow2, toBeRow );
81
82 std::cout << "Result of verifying 'maySupersede' against oldRow2: " << checkOld << std::endl
83 << std::endl;
84
85 std::string colMin;
86 std::string colMax;
87
89 if ( serCol )
90 {
92
93 std::cout <<
"Value of isPrimaryKey() for column ser_no is: " << serCol->
isPrimaryKey()
94 << std::endl;
95
97 { std::cout << "Min and max for ser_no are " << colMin << ", " << colMax << std::endl; }
98 else { std::cout << "ser_no has no min, max " << std::endl; }
99 }
100 else std::cout << "no such column as 'ser_no' " << std::endl;
101
103 if ( vstartCol )
104 {
106
108 { std::cout << "Min and max for vstart are " << colMin << ", " << colMax << std::endl; }
109 else { std::cout << "vstart has no min, max " << std::endl; }
110 }
111 else std::cout << "no such column as 'vstart' " << std::endl;
112
113
114
115#ifdef TEST_INSERT
116 std::string connectfileT( "$(RDBMODELROOT)/xml/connect/mysqlTester.xml" );
117#else
118 std::string connectfileT( "$(RDBMODELROOT)/xml/connect/mysqlSlacT.xml" );
119#endif
120
121
123
124 std::string connectfile( "$(RDBMODELROOT)/xml/connect/mysqlSlac.xml" );
125
126 if ( !( con->
open( connectfile ) ) )
127 {
128 std::cerr << "Unable to connect to MySQL database" << std::endl;
129 return -1;
130 }
131
133
134 switch ( match )
135 {
137 std::cout << "XML schema and MySQL database are equivalent!" << std::endl;
138 break;
140 std::cout << "XML schema and MySQL database are compatible" << std::endl;
141 break;
143 std::cout << "XML schema and MySQL database are NOT compatible" << std::endl;
144 return -2;
146 std::cout << "Connection failed while attempting match" << std::endl;
147 return -1;
148 }
149
150
151 std::string rq[3];
152 rq[0] = "select * from metadata_v2r1";
153 rq[1] = "select calib_type from metadata_v2r1";
154 rq[2] = "select garbage from metadata_v2r1";
155 for ( int i = 0; i < 3; i++ )
156 {
157 try
158 {
160 if ( res )
161 {
162 std::cout << "dbRequest '" << rq[i] << "'" << std::endl;
163 std::cout <<
"succeeded, returned " << res->
getNRows() <<
" rows" << std::endl;
164 }
165 else
166 {
167 std::cout << "dbRequest '" << rq[i] << "'" << std::endl;
168 std::cout << "succeeded, no returned data expected" << std::endl;
169 }
171 {
172 std::cerr << "dbRequest '" << rq[i] << "'" << std::endl;
173 std::cerr <<
" failed with error: " << ex.
getMsg() << std::endl;
174 std::cerr <<
"Code " << ex.
getCode() << std::endl;
175 }
176 }
177
178
180
181 if ( !( con->
open( connectfile ) ) )
182 {
183 std::cerr << "Unable to connect to MySQL database" << std::endl;
184 return -1;
185 }
187
188
189 if ( !( con->
open( connectfileT ) ) )
190 {
191 std::cerr << "Unable to connect to MySQL database" << std::endl;
192 return -1;
193 }
195
196
197
198
199#ifdef TEST_INSERT
200 bool disable = true;
203 if ( serial )
204 {
205 std::cout << "Hallelujah! Inserted new row, serial# " << serial << std::endl;
206
207
208
209
210
211
212
213
214
215
216
217
218 }
219 else if ( disable )
220 {
221 serial = 17;
222 }
223 if ( serial )
224 {
225
226
227 int nUpdates =
doUpdate( rdb, serial );
228
229 if ( nUpdates ) { std::cout << "Did " << nUpdates << " on row " << serial << std::endl; }
230 else std::cout << "Failed to update row " << serial << std::endl;
231 }
232 else { std::cout << "Bah, humbug. Insert failed. " << std::endl; }
233
235 if ( serial )
236 {
237 std::cout << "Did insertLatest, inserted new row with ser_no = " << serial << std::endl;
238
239 int newSerial;
241 if ( didSup )
242 {
243 std::cout << "Supersede of " << serial << " successful." << std::endl;
244 std::cout << "New row is " << newSerial << std::endl;
245 }
246 else { std::cout << "Supersede of " << serial << " failed" << std::endl; }
247 }
248 else if ( !disable ) { std::cout << "Bah, humbug. insertLatest failed. " << std::endl; }
249#else
250
251
252
253 switch ( match )
254 {
256 std::cout << "XML schema and MySQL database are equivalent!" << std::endl;
257 break;
259 std::cout << "XML schema and MySQL database are compatible" << std::endl;
260 break;
262 std::cout << "XML schema and MySQL database are NOT compatible" << std::endl;
263 break;
264
266 std::cout << "Connection failed while attempting match" << std::endl;
267 return -1;
268 }
269
271 {
273
274 switch ( match )
275 {
277 std::cout << "XML schema and MySQL database are equivalent!" << std::endl;
278 break;
280 std::cout << "XML schema and MySQL database are compatible" << std::endl;
281 break;
283 std::cout << "XML schema and MySQL database are NOT compatible" << std::endl;
284
286 std::cout << "Connection failed while attempting match" << std::endl;
287 return -1;
288 }
289 }
290#endif
291
292 return 0;
293}
bool verify(Row &old, Row &toBe) const
bool isPrimaryKey() const
Datatype * getDatatype() const
bool getInterval(std::string &min, std::string &max)
void setInputSource(std::string pname)
void setBuilder(Builder *b)
static Manager * getManager()
virtual bool open(const std::string &host, const std::string &userid, const std::string &password, const std::string &dbName)
virtual ResultHandle * dbRequest(const std::string &request)
virtual void disableModify(bool disable)
virtual MATCH matchSchema(Rdb *rdb, bool matchDbName=true)
virtual int getCode() const
Table * getTable(const std::string &name) const
Column * getColumn(const std::string &tableName, const std::string &colName) const
virtual unsigned int getNRows() const =0
Return number of rows in results.
int doInsert(rdbModel::Rdb *con)
int doSmartInsert(rdbModel::Rdb *rdb)
void tryQuick(rdbModel::Table *t, const std::string &colname)
int doSupersedes(rdbModel::Rdb *rdb, int serial, int *newSerial)
int doUpdate(rdbModel::Rdb *, int serial)