void load_callback2(int fsid, struct mfs_subobj_header *obj, struct mfs_attr_header *attr, void *data) { static char *name; static u32 iattr; if (obj->flags || !attr) return; if (attr->attr == 16) { name = (char *)data; } else if (attr->attr == 17) { iattr = ntohl(*(u32 *)data); } else if (attr->attr == 18) { u32 objtype = ntohl(*(u32 *)data); schema_add(current_type, iattr, name, objtype); } }
/* used to load a local schema.txt to make things faster */ static int preload_schema() { int i, itype, iattr, atype=0; char *type, *attr, *flag; static int loaded = 0; if (loaded) return 1; loaded = 1; for(i = 0; i < sizeof(preload_schema_table) / sizeof(preload_schema_t); i++) { itype = preload_schema_table[i].itype; type = preload_schema_table[i].type; iattr = preload_schema_table[i].iattr; attr = preload_schema_table[i].attr; flag = preload_schema_table[i].attr_type; if (!types[itype]) types[itype] = strdup(type); attrs[itype][iattr].name = strdup(attr); if (strcmp(flag,"string")==0) { atype = TYPE_STRING; } else if (strcmp(flag,"int")==0) { atype = TYPE_INT; } else if (strcmp(flag,"object")==0) { atype = TYPE_OBJECT; } else if (strcmp(flag,"file")==0) { atype = TYPE_FILE; } else { vstream_error("error parsing preloaded schema table\n"); return 0; } if (! types[itype]) { types[itype] = strdup(type); } schema_add(itype, iattr, attr, atype); } return 1; }
int main(int argc, char* argv[]) { table_data_t* ptable_data; schema_t* pschema_key; schema_t* pschema_val; table_schema_t* ptable_schema; table_t* ptable; srand((int)(time(0))); schema_set_init(); table_set_init(); // loop begin pschema_key = schema_init(); pschema_val = schema_init(); ptable_data = table_data_init("col1", BIGINT, 0); schema_add(pschema_key, ptable_data); ptable_data = table_data_init("col2", VARCHAR, 10); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col3", VARCHAR, 11); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col4", VARCHAR, 12); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col5", VARCHAR, 13); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col6", VARCHAR, 14); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col7", VARCHAR, 15); schema_add(pschema_val, ptable_data); ptable_schema = table_schema_init(pschema_key, pschema_val); schema_set_add(ptable_schema); // loop end // loop begin pschema_key = schema_init(); pschema_val = schema_init(); ptable_data = table_data_init("t2col1", BIGINT, 0); schema_add(pschema_key, ptable_data); ptable_data = table_data_init("t2col2", VARCHAR, 10); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("t2col3", VARCHAR, 11); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("t2col4", VARCHAR, 12); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("t2col5", VARCHAR, 13); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("t2col6", VARCHAR, 14); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("t2col7", VARCHAR, 15); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("t2col8", VARCHAR, 15); schema_add(pschema_val, ptable_data); ptable_schema = table_schema_init(pschema_key, pschema_val); schema_set_add(ptable_schema); // loop end // loop begin pschema_key = schema_init(); pschema_val = schema_init(); ptable_data = table_data_init("col1", BIGINT, 0); schema_add(pschema_key, ptable_data); ptable_data = table_data_init("col2", VARCHAR, 10); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col3", VARCHAR, 11); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col4", VARCHAR, 12); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col5", VARCHAR, 13); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col6", VARCHAR, 14); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col7", VARCHAR, 15); schema_add(pschema_val, ptable_data); ptable_schema = table_schema_init(pschema_key, pschema_val); schema_set_add(ptable_schema); // loop end // loop begin pschema_key = schema_init(); pschema_val = schema_init(); ptable_data = table_data_init("col1", BIGINT, 0); schema_add(pschema_key, ptable_data); ptable_data = table_data_init("col2", VARCHAR, 10); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col3", VARCHAR, 11); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col4", VARCHAR, 12); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col5", VARCHAR, 13); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col6", VARCHAR, 14); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col7", VARCHAR, 15); schema_add(pschema_val, ptable_data); ptable_schema = table_schema_init(pschema_key, pschema_val); schema_set_add(ptable_schema); // loop end // loop begin pschema_key = schema_init(); pschema_val = schema_init(); ptable_data = table_data_init("col1", BIGINT, 0); schema_add(pschema_key, ptable_data); ptable_data = table_data_init("col2", BIGINT, 0); schema_add(pschema_key, ptable_data); ptable_data = table_data_init("col3", VARCHAR, 11); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col4", VARCHAR, 12); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col5", VARCHAR, 13); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col6", VARCHAR, 14); schema_add(pschema_val, ptable_data); ptable_data = table_data_init("col7", VARCHAR, 15); schema_add(pschema_val, ptable_data); ptable_schema = table_schema_init(pschema_key, pschema_val); schema_set_add(ptable_schema); // loop end ptable = table_init("test_mysql_cmd", ptable_schema); table_set_add(ptable); char* sql = my_malloc((size_t)1024000); memset(sql, 0, sizeof(sql)); eng_ctx_t* eng_ctx = my_malloc(sizeof(eng_ctx_t)); memset(eng_ctx, 0, sizeof(eng_ctx_t)); eng_ctx->sql = sql; eng_ctx->table = ptable; eng_ctx->table_schema = ptable_schema; sql_gen(eng_ctx, INSERT); sql_gen(eng_ctx, UPDATE); sql_gen(eng_ctx, DELETE); sql_gen(eng_ctx, SELECT); sql_gen(eng_ctx, CREATE); my_free(sql); my_free(eng_ctx); schema_set_destroy(); table_set_destroy(); return 0; }
static void load_schema(int type) { u32 size, fsid; char path[100]; void *buf; if (!attrs[0][1].name) { schema_add(-1, 1, "Version", TYPE_INT); schema_add(-1, 2, "Expiration", TYPE_INT); schema_add(-1, 3, "Path", TYPE_STRING); schema_add(-1, 4, "IndexPath", TYPE_STRING); schema_add(-1, 5, "IndexUsed", TYPE_OBJECT); schema_add(-1, 6, "IndexUsedBy", TYPE_OBJECT); schema_add(-1, 7, "IndexAttr", TYPE_OBJECT); schema_add(-1, 8, "ServerId", TYPE_STRING); schema_add(-1, 9, "ServerVersion", TYPE_INT); schema_add(-1, 10, "Uuid", TYPE_STRING); schema_add(-1, 11, "Unsatisfied", TYPE_STRING); schema_add(-1, 12, "Bits", TYPE_INT); schema_add(-1, 13, "Unused1", TYPE_INT); schema_add(-1, 14, "Unused2", TYPE_INT); schema_add(-1, 15, "Unused3", TYPE_INT); } sprintf(path, "/ObjectType/%s", vstream_schema_type(type)); fsid = vstream_mfs_resolve(path); if (fsid != 0) { size = vstream_mfs_fsid_size(fsid); if (size > 0) { buf = malloc(size); vstream_mfs_fsid_pread(fsid, buf, 0, size); vstream_parse_object(fsid, buf, load_callback1); vstream_parse_object(fsid, buf, load_callback2); free(buf); } } }