⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbtest.c

📁 bonddb 是一个源于PostgreSQL封装包的对象。它是一个由C/C++编写的快速数据提取层应用软件
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -