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;
}
示例#3
0
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);
	    }
	}
}