sql_table * tr_find_table( sql_trans *tr, sql_table *t) { sql_table *nt = NULL; while ((!nt || !nt->data) && tr) { sql_schema *s = tr_find_schema( tr, t->s); nt = find_sql_table_id(s, t->base.id); tr = tr->parent; } return nt; }
sql_idx * tr_find_idx( sql_trans *tr, sql_idx *i) { sql_idx *ni = NULL; while ((!ni || !ni->data) && tr) { sql_schema *s = tr_find_schema( tr, i->t->s); sql_table *t = find_sql_table_id(s, i->t->base.id); node *n = cs_find_id(&t->idxs, i->base.id); if (n) ni = n->data; tr = tr->parent; } return ni; }
sql_column * tr_find_column( sql_trans *tr, sql_column *c) { sql_column *nc = NULL; while ((!nc || !nc->data) && tr) { sql_schema *s = tr_find_schema( tr, c->t->s); sql_table *t = find_sql_table_id(s, c->t->base.id); node *n = cs_find_id(&t->columns, c->base.id); if (n) nc = n->data; tr = tr->parent; } return nc; }
sql_table * tr_find_table( sql_trans *tr, sql_table *t) { sql_table *nt = NULL; while ((!nt || !nt->data) && tr) { sql_schema *s = tr_find_schema( tr, t->s); if (list_length(s->tables.set) < HASH_MIN_SIZE) nt = find_sql_table_id(s, t->base.id); else nt = find_sql_table(s, t->base.name); assert(nt->base.id == t->base.id); tr = tr->parent; } return nt; }