static int table_insert(sql_trans *tr, sql_table *t, ...) { va_list va; node *n = cs_first_node(&t->columns); void *val = NULL; int cnt = 0; int ok = LOG_OK; va_start(va, t); for (; n; n = n->next) { sql_column *c = n->data; val = va_arg(va, void *); if (!val) break; ok = store_funcs.append_col(tr, c, val, c->type.type->localtype); if (ok != LOG_OK) return ok; cnt++; } va_end(va); if (n) { fprintf(stderr, "called table_insert(%s) with wrong number of args (%d,%d)\n", t->base.name, list_length(t->columns.set), cnt); assert(0); return LOG_ERR; } return LOG_OK; }
static sql_column * first_column(sql_table *t) { node *n = cs_first_node(&t->columns); if (n) return n->data; return NULL; }
static int table_dump(sql_trans *tr, sql_table *t) { node *n = cs_first_node(&t->columns); int i, l = cs_size(&t->columns); BAT **b = (BAT**)GDKzalloc(sizeof(BAT*) * l); (void)tr; for (i = 0; n; n = n->next, i++) { sql_column *c = n->data; sql_delta *bat = c->data; b[i] = temp_descriptor(bat->bid); } BATmultiprintf(GDKstdout, l +1, b, TRUE, 0, 1); for (i = 0; i < l; i++) bat_destroy(b[i]); GDKfree(b); return 0; }
static int table_check(sql_trans *tr, sql_table *t) { node *n = cs_first_node(&t->columns); BUN cnt = BUN_NONE; (void)tr; for (; n; n = n->next) { sql_column *c = n->data; sql_delta *bat = c->data; BAT *b = temp_descriptor(bat->bid); if (cnt == BUN_NONE) { cnt = BATcount(b); } else if (cnt != BATcount(b)) { assert(0); return (int)(cnt - BATcount(b)); } bat_destroy(b); } return 0; }