📄 dbtest.c
字号:
#include <stdio.h>#include <glib.h>#include <stdlib.h>#include <string.h>#include "debug.h"#include "db.h"#include "dbclient.h"#include "dbgather.h"#include "dbsqlparse.h"#include "dblooksee.h"#include "dbconstraint.h"#include "dbobject.h"#include "dbmapme.h"#include "dboo.h"#include "dbuniqueid.h"#include "dbbirth.h"#include "dbfield.h"#include "dbsuggest.h"#include "dbfilter.h"#include "sql_parser.h"#include "dbmethod.h"gint test_result(gchar * retstr, gchar * shouldbe, gint * pass);gint test_total(gint pass, gint total);intmain(int argc, char *argv[]) { DbDatabaseDef *db; gchar *retstr; gint test = 0; gint i, retval, connect; gint pass = 0; GList *walk; DbTableDef *tb; Object *obj; if (argc <= 1) { /* run your a specific test here on default */ test = 0; } else test = atoi(argv[1]); if (argc >= 3) setdebuglinenum(1); debug_init(); connect = db_init(argv[0]); if (connect < 0) { errormsg("No database found"); exit(0); } db = globaldb; switch (test) { /* table info retriveal */ case 0: { debugmsg("Number of tables %d\n" "Number of fields in %s = %d\n", db->numtable, db->table[db->numtable - 3]->name, db->table[db->numtable - 3]->num); if (db->numview > 0) debugmsg("Number of views %d\n" "Number of fields in %s = %d\n", db->numview, db->view[0]->name, db->view[0]->num); else debugmsg("No views found\n"); break; } case 1: { /* open and close an object */ obj = db_createobject("person"); debugmsg("object has been created, now i shall free"); db_freeobject(obj); break; } case 2: { /* run a query */ obj = db_createobject("person"); db_getobjectbyfield(obj, "id", "2"); if (obj->num != 1 && db_id_isnewrecord(obj->id) == FALSE) errormsg("TEST FAILED"); else debugmsg("TEST PASSED"); db_freeobject(obj); break; } case 3: { /* run a query */ obj = db_createobject("person"); g_assert(obj->cache); db_getobjectbyfield(obj, "id", "2"); db_getvalue(obj, "email", NULL, &retstr); debugmsg("returned email address: %s", retstr); if (retstr == NULL || strcmp(retstr, "andrew@treshna.com") != 0) errormsg("TEST FAILED"); else debugmsg("TEST PASSED"); db_freeobject(obj); break; } case 4: { /* Load and modify record */ obj = db_createobject("person"); db_getobjectbyfield(obj, "id", "2"); db_getvalue(obj, "lastname", NULL, &retstr); if (retstr == NULL) errormsg("invalid retval"); else { if (strcmp(retstr, "hill") == 0) pass++; else errormsg("%s didn't match thatcher", retstr); debugmsg("lastname is %s", retstr); } db_setvalue(obj, "lastname", NULL, "thatcher"); db_setvalue(obj, "firstname", NULL, "andru"); db_setvalue(obj, "email", NULL, "andrew@treshna.com"); db_getvalue(obj, "lastname", NULL, &retstr); if (retstr == NULL) errormsg("invalid retval"); else { if (strcmp(retstr, "thatcher") == 0) pass++; else errormsg("%s didn't match hill", retstr); debugmsg("lastname is %s", retstr); } db_setvalue(obj, "lastname", NULL, "hill"); db_freeobject(obj); test_total(pass, 2); break; } case 5: { /* create a new record */ debugmsg("testing db write to for a new record"); obj = db_createobject("person"); db_setvalue(obj, "id", NULL, "24"); db_setvalue(obj, "lastname", NULL, "hill"); db_setvalue(obj, "firstname", NULL, "dru"); db_setvalue(obj, "email", NULL, "dru@treshna.com"); db_freeobject(obj); obj = db_createobject("person"); db_getobjectbyfield(obj, "id", "24"); db_getvalue(obj, "email", NULL, &retstr); if (retstr == NULL || strcmp(retstr, "dru@treshna.com") != 0) ; else pass++; db_deleteobject(obj); db_freeobject(obj); if (pass==0) errormsg("TEST FAILED"); else debugmsg("TEST PASSED"); break; } case 6: { obj = db_sql(NULL, "SELECT * FROM soldier"); if (db_numrows(obj) == 4) debugmsg("TEST PASSED"); else errormsg("TEST FAILED"); db_freeobject(obj); obj = db_sql(NULL, "select * from soldier where id=3"); if (db_numrows(obj) == 1) debugmsg("TEST PASSED"); else errormsg("TEST FAILED"); db_freeobject(obj); break; } case 7: /* basic string parsing */ debugmsg("Testing select statement for sql parsing"); debugmsg("%d", db_sql_reftotable("SELECT * FROM person, persontype WHERE persontype.id = person.type", "person")); if (db_sql_reftotable("SELECT * FROM person, persontype WHERE persontype.id = person.type", "person") == 14) debugmsg("TEST PASSED"); else errormsg("TEST FAILED"); break; /* display a list of views, and information about each view */ case 8: { debugmsg("Printing list of views, %d num", db->numview); for (i = 0; i < db->numview; i++) { debugmsg("==== %s ====", db->view[i]->name); debugmsg("Query: %s", db->view[i]->query); walk = db->view[i]->fromtable; while (walk != NULL) { tb = walk->data; g_assert(tb); debugmsg("From Table: %s", tb->name); walk = walk->next; } walk = db->view[i]->subtable; while (walk != NULL) { tb = walk->data; g_assert(tb); debugmsg("Sub table view: %s", tb->name); walk = walk->next; } } break; } /* Test searching for data retrival of records */ case 9: { gint j; debugmsg("Printing contents of fields in table"); for (i = 0; i < db->numtable; i++) for (j = 0; j < db->table[i]->num; j++) { debugmsg("%s.%s\n", db->table[i]->name, db->table[i]->field[j]->name); } break; } /* test loading objects from within objects */ case 10: { DbLookSee *looksee; debugmsg("Testing search capiablities"); looksee = db_looksee_create("soldier"); db_looksee_addand(looksee, "name", "Andru", 1, DBTEXT); obj = db_looksee_exec(looksee); g_assert(obj); debugmsg("%d items returned", obj->num); db_freeobject(obj); break; } case 11: { GList *l; DbConstraintDef *c; DbTableDef *tmptab; debugmsg("Testing constraints capabilities"); for (l = db->constraints; l != NULL; l = l->next) { c = l->data; debugmsg("constraint: %s->%s = %s->%s", c->table[0], c->column[0], c->table[1], c->column[1]); } tmptab = db_findtable("soldier"); g_assert(tmptab); g_assert(tmptab->cref); break; } case 12: { debugmsg("testing assigning variables"); db_generalisetype(db); break; } case 13: { debugmsg("Testing deletation of records"); obj = db_createobject("person"); db_setvalue(obj, "id", NULL, "13"); db_setvalue(obj, "lastname", NULL, "hillto be delete"); db_setvalue(obj, "firstname", NULL, "dj dru"); db_setvalue(obj, "email", NULL, "andru@treshna.com"); db_freeobject(obj); debugmsg("Now going to load and then delete the record"); obj = db_createobject("person"); db_getobjectbyfield(obj, "id", "13"); db_deleteobject(obj); db_clearobject(obj); debugmsg("Checking to see if its properly been deleted"); db_getobjectbyfield(obj, "id", "13"); if (db_isnewrecord(obj) == TRUE && obj->num==0) debugmsg("TEST PASSED"); else errormsg("TEST FAILED, record not deleted, %d items", obj->num); db_freeobject(obj); break; } case 14: { gchar *tmpstr2; Object *objrank; debugmsg("Testing object by object loadings"); obj = db_createobject("soldier"); objrank = db_createobject("rank"); db_getobjectbyfield(obj, "id", "3"); retval = db_loadobjectbyobject(obj, objrank, "rank"); debugmsg("Retval from load by object %d", retval); if (retval == 0) { db_getvalue(objrank, "description", NULL, &retstr); db_getvalue(obj, "name", NULL, &tmpstr2); } else errormsg("loadobjects failed"); debugmsg("%s %s is in the house", retstr, tmpstr2); db_freeobject(obj); db_freeobject(objrank); if (retstr == NULL || tmpstr2 == NULL || strcmp(retstr, "General") != 0 || strcmp(tmpstr2, "Avis") != 0) errormsg("TEST FAILED"); else debugmsg("TEST PASSED"); break; } case 15: { Object *objrank; debugmsg("Testing add object by another object"); objrank = db_createobject("rank"); db_getobjectbyfield(objrank, "id", "3"); obj = db_createobject("soldier"); db_addobjecttoobject(obj, objrank); db_setvalue(obj, "id", NULL, "6"); db_setvalue(obj, "name", NULL, "cannon fodder"); db_setvalue(obj, "countryid", NULL, "1"); db_setvalue(obj, "dob", NULL, "2000-12-21"); db_setvalue(obj, "active", NULL, "t"); db_setvalue(obj, "nihil", NULL, "f"); db_freeobject(obj); obj = db_createobject("soldier"); debugmsg("Retval from load by object %d", db_loadobjectbyobject(objrank, obj, "soldier")); debugmsg("Number of corporals: %d", obj->num); if (obj->num < 2) { errormsg("Too few corporals, I failed to add that new solider cannonfodder"); break; } db_getvalue(obj, "name", NULL, &retstr); debugmsg("Private: %s", retstr); if (strcmp(retstr, "Liam") == 0) pass++; obj->row++; db_getvalue(obj, "name", NULL, &retstr); debugmsg("Private: %s", retstr); if (strcmp(retstr, "cannon fodder") == 0) pass++; db_getobjectbyfield(obj, "id", "6"); db_deleteobject(obj); db_freeobject(obj); db_freeobject(objrank); test_total(pass, 2); break; } /* test dbmapme module */ case 16: { debugmsg("Testing dbmapme module"); tb = db_findtable("soldier"); retstr = db_mapfieldsource(tb, "description"); debugmsg("Searching for the reference 'description' returned %s", retstr); retstr = db_mapfieldsource(tb, "rank.description"); debugmsg("Searching for the reference 'rank.description' returned %s", retstr); retstr = db_mapfieldsource(tb, "rank_id.description"); debugmsg("Searching for the reference 'rank_id.description' returned %s", retstr); retstr = db_sqlparse_suggesttable("rank.description"); debugmsg("Suggested table for 'rank.description' is %s", retstr); mem_free(retstr); retstr = db_sqlparse_suggestfield("rank.description"); debugmsg("Suggested field for 'rank.description' is %s", retstr); mem_free(retstr); retstr = db_sqlparse_suggestfield("rankname"); g_assert(!retstr); break; } case 17: { Object *objrank; debugmsg("Testing dbmapme module, phase 2"); retstr = NULL; obj = db_createobject("soldier"); db_getobjectbyfield(obj, "id", "3"); retval = db_createmapobject(obj, "rank"); debugmsg("Creating map, retval is %d", retval); db_getvalue(obj, "name", NULL, &retstr); debugmsg("Person loaded at moment is %s", retstr); test_result(retstr, "Avis", &pass); objrank = db_getmapbyclass(obj, "rank"); db_getvalue(objrank, "description", NULL, &retstr); debugmsg("Rank of person is %s", retstr); test_result(retstr, "General", &pass); test_total(pass, 2); db_freeobject(obj); break; } case 18: debugmsg("I AM TIGER!"); { gint vla; obj = db_createobject("persontype"); db_getvalue(obj,"id",NULL,&retstr); vla = atoi(retstr); if (vla < 1) errormsg("TEST FAILED"); else debugmsg("TEST PASSED"); db_freeobject(obj); break; } case 19: { gchar *comment = mem_alloc(15); gint type; gchar *table; gchar *field; strcpy(comment, "1;liam.name"); debugmsg("Using string %s\n", comment); type = db_casual_type(comment); field = db_casual_field(comment); table = db_casual_table(comment); debugmsg("Got type: %d\nGot field: %s\nGot table: %s\n", type, field, table); mem_free(comment); mem_free(field); mem_free(table); break; } /* Test if default values work */ case 20: { obj = db_createobject("soldier"); db_getobjectbyfield(obj, "id", "3"); db_add(obj); db_setvalue(obj, "id", NULL, "20"); db_setvalue(obj, "name", NULL, "test20"); db_setvalue(obj, "rankid", NULL, "3"); db_setvalue(obj, "countryid", NULL, "1"); db_setvalue(obj, "active", NULL, "f"); db_loadall(obj); db_movelast(obj); db_getvalue(obj, "id", NULL, &retstr); test_result(retstr, "20", &pass); db_getvalue(obj, "name", NULL, &retstr); test_result(retstr, "test20", &pass); db_getobjectbyfield(obj, "id", "20"); db_deleteobject(obj); db_freeobject(obj); test_total(pass, 2); break; } /* variation of above test */ case 21: { obj = db_createobject("soldier"); db_add(obj); db_setvalue(obj, "id", NULL, "21");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -