Update of /cvsroot/monetdb/sql/src/storage
In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv10921/src/storage
Modified Files:
sql_storage.h store.mx
Log Message:
moved most of the DDL statements into mal
Index: store.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/storage/store.mx,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- store.mx 7 Jan 2010 15:24:33 -0000 1.41
+++ store.mx 10 Jan 2010 15:33:35 -0000 1.42
@@ -1093,21 +1093,23 @@
}
sql_table *
-create_sql_table(char *name, sht type, bit system, int persistence, int
commit_action)
+create_sql_table(sql_allocator *sa, char *name, sht type, bit system, int
persistence, int commit_action)
{
- sql_table *t = ZNEW(sql_table);
+ sql_table *t = (sa)?SA_ZNEW(sa, sql_table):ZNEW(sql_table);
- assert((persistence==SQL_PERSIST || commit_action) && commit_action>=0);
+ assert((persistence==SQL_PERSIST ||
+ persistence==SQL_DECLARED_TABLE ||
+ commit_action) && commit_action>=0);
base_init(&t->base, next_oid(), TR_NEW, name);
t->type = type;
t->system = system;
t->persistence = (temp_t)persistence;
t->commit_action = (ca_t)commit_action;
t->query = NULL;
- cs_init(&t->columns, (fdestroy) &column_destroy);
- cs_init(&t->idxs, (fdestroy) &idx_destroy);
- cs_init(&t->keys, (fdestroy) &key_destroy);
- cs_init(&t->triggers, (fdestroy) &trigger_destroy);
+ (sa)?cs_new(&t->columns, sa):cs_init(&t->columns, (fdestroy)
&column_destroy);
+ (sa)?cs_new(&t->idxs, sa):cs_init(&t->idxs, (fdestroy) &idx_destroy);
+ (sa)?cs_new(&t->keys, sa):cs_init(&t->keys, (fdestroy) &key_destroy);
+ (sa)?cs_new(&t->triggers, sa):cs_init(&t->triggers, (fdestroy)
&trigger_destroy);
t->pkey = NULL;
t->cluster = NULL;
t->sz = COLSIZE;
@@ -1116,13 +1118,62 @@
return t;
}
+sql_column *
+dup_sql_column(sql_allocator *sa, sql_table *t, sql_column *c)
+{
+ sql_column *col = SA_ZNEW(sa, sql_column);
+
+ base_init(&col->base, c->base.id, TR_NEW, c->base.name);
+ col->type = c->type;
+ col->def = NULL;
+ if (c->def)
+ col->def = sa_strdup(sa, c->def);
+ col->null = c->null;
+ col->colnr = c->colnr;
+ col->t = t;
+ col->unique = c->unique;
+ cs_add(&t->columns, col, TR_NEW);
+ return col;
+}
+
+sql_table *
+dup_sql_table(sql_allocator *sa, sql_table *t)
+{
+ node *n;
+ sql_table *nt = create_sql_table(sa, t->base.name, t->type, t->system,
SQL_DECLARED_TABLE, t->commit_action);
+
+ for (n = t->columns.set->h; n; n = n->next)
+ dup_sql_column(sa, nt, n->data);
+ nt->columns.dset = NULL;
+ nt->columns.nelm = NULL;
+
+/*
+ if (t->idxs.set) {
+ for (n = t->idxs.set->h; n; n = n->next) {
+ sql_idx *i = n->data;
+ mvc_copy_idx(sql, nt, i);
+ }
+ }
+ if (t->keys.set) {
+ for (n = t->keys.set->h; n; n = n->next) {
+ sql_key *k = n->data;
+
+ mvc_copy_key(sql, nt, k);
+ }
+ }
+*/
+ /* TODO copy triggers */
+
+ return nt;
+}
+
static sql_table *
bootstrap_create_table(sql_trans *tr, sql_schema *s, char *name)
{
int istmp = isTempSchema(s);
int persistence = istmp?SQL_GLOBAL_TEMP:SQL_PERSIST;
sht commit_action = istmp?CA_PRESERVE:CA_COMMIT;
- sql_table *t = create_sql_table(name, tt_table, 1, persistence,
commit_action);
+ sql_table *t = create_sql_table(NULL, name, tt_table, 1, persistence,
commit_action);
if (bs_debug)
fprintf(stderr, "bootstrap_create_table %s\n", name );
@@ -1184,7 +1235,12 @@
bs_debug = debug;
/* initialize empty bats */
- bat_utils_init();
+ if (store == store_bat ||
+ store == store_su ||
+ store == store_ro ||
+ store == store_suro ||
+ store == store_bpm)
+ bat_utils_init();
if (store == store_bat) {
bat_storage_init(&store_funcs);
bat_table_init(&table_funcs);
@@ -1575,6 +1631,46 @@
return nk;
}
+sql_key *
+sql_trans_copy_key( sql_trans *tr, sql_table *t, sql_key *k )
+{
+ sql_key *nk = key_dup(tr, TR_NEW, k, t);
+ sql_fkey *fk = (sql_fkey*)nk;
+ sql_schema *syss = find_sql_schema(tr, isGlobalTable(t)?"sys":"tmp");
+ sql_table *syskey = find_sql_table(syss, "keys");
+ sql_table *syskc = find_sql_table(syss, "keycolumns");
+ int neg = -1, action = -1, nr;
+ node *n;
+
+ cs_add(&t->keys, nk, TR_NEW);
+
+ if (nk->type == fkey)
+ action = (fk->on_update<<8) + fk->on_delete;
+
+ table_funcs.table_insert(tr, syskey, &nk->base.id, &t->base.id,
&nk->type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *)
nk)->rkey->k.base.id : &neg, &action);
+
+ if (nk->type == fkey)
+ sql_trans_create_dependency(tr, ((sql_fkey *)
nk)->rkey->k.base.id, nk->base.id, FKEY_DEPENDENCY);
+
+ for (n = nk->columns->h, nr = 0; n; n = n->next, nr++) {
+ sql_kc *kc = n->data;
+
+ table_funcs.table_insert(tr, syskc, &k->base.id,
kc->c->base.name, &kc->trunc, &nr);
+
+ if (nk->type == fkey)
+ sql_trans_create_dependency(tr, kc->c->base.id,
k->base.id, FKEY_DEPENDENCY);
+ if (nk->type == pkey) {
+ sql_trans_create_dependency(tr, kc->c->base.id,
k->base.id, KEY_DEPENDENCY);
+ sql_trans_alter_null(tr, kc->c, 0);
+ }
+ }
+
+ syskey->base.wtime = syskey->s->base.wtime = t->base.wtime =
t->s->base.wtime = tr->wtime = tr->stime;
+ if (isGlobalTable(t))
+ tr->schema_updates ++;
+ return nk;
+}
+
static sql_idx *
idx_dup(sql_trans *tr, int flag, sql_idx * i, sql_table *t)
{
@@ -1607,6 +1703,49 @@
return ni;
}
+sql_idx *
+sql_trans_copy_idx( sql_trans *tr, sql_table *t, sql_idx *i )
+{
+ sql_schema *syss = find_sql_schema(tr, isGlobalTable(t)?"sys":"tmp");
+ sql_table *sysidx = find_sql_table(syss, "idxs");
+ sql_table *sysic = find_sql_table(syss, "keycolumns");
+ node *n;
+ int nr;
+ sql_idx *ni = ZNEW(sql_idx);
+
+ base_init(&ni->base, i->base.id, TR_NEW, i->base.name);
+
+ ni->columns = list_create((fdestroy) &kc_destroy);
+ ni->t = t;
+ ni->type = i->type;
+ ni->key = NULL;
+
+ if (ni->type == isclustered) {
+ ni->t->cluster = ni;
+ ni->t->clustered = i->t->clustered;
+ }
+
+ for (n = i->columns->h, nr = 0; n; n = n->next, nr++) {
+ sql_kc *okc = n->data, *ic;
+
+ list_append(ni->columns, ic = kc_dup(tr, TR_NEW, okc, t));
+
+ table_funcs.table_insert(tr, sysic, &ni->base.id,
ic->c->base.name, &ic->trunc, &nr);
+ sysic->base.wtime = sysic->s->base.wtime = tr->wtime =
tr->stime;
+ }
+ list_append(t->s->idxs, ni);
+ cs_add(&t->idxs, ni, TR_NEW);
+
+ if (!isDeclaredTable(t) && isTable(ni->t) && idx_is_column(ni->type))
+ store_funcs.create_idx(tr, ni);
+ if (!isDeclaredTable(t))
+ table_funcs.table_insert(tr, sysidx, &ni->base.id, &t->base.id,
&ni->type, ni->base.name);
+ ni->base.wtime = t->base.wtime = t->s->base.wtime = tr->wtime =
tr->stime;
+ if (isGlobalTable(t))
+ tr->schema_updates ++;
+ return ni;
+}
+
static sql_trigger *
trigger_dup(sql_trans *tr, int flag, sql_trigger * i, sql_table *t)
{
@@ -1662,6 +1801,35 @@
return c;
}
+sql_column *
+sql_trans_copy_column( sql_trans *tr, sql_table *t, sql_column *c )
+{
+ sql_schema *syss = find_sql_schema(tr, isGlobalTable(t)?"sys":"tmp");
+ sql_table *syscolumn = find_sql_table(syss, "_columns");
+ sql_column *col = ZNEW(sql_column);
+
+ base_init(&col->base, c->base.id, TR_NEW, c->base.name);
+ col->type = c->type;
+ col->def = NULL;
+ if (c->def)
+ col->def = _strdup(c->def);
+ col->null = c->null;
+ col->colnr = c->colnr;
+ col->t = t;
+ col->unique = c->unique;
+
+ cs_add(&t->columns, col, TR_NEW);
+
+ if (isTable(t))
+ store_funcs.create_col(tr, col);
+ if (!isDeclaredTable(t))
+ table_funcs.table_insert(tr, syscolumn, &col->base.id,
col->base.name, col->type.type->sqlname, &col->type.digits, &col->type.scale,
&t->base.id, (col->def) ? col->def : ATOMnilptr(TYPE_str), &col->null,
&col->colnr);
+ col->base.wtime = t->base.wtime = t->s->base.wtime = tr->wtime =
tr->stime;
+ if (isGlobalTable(t))
+ tr->schema_updates ++;
+ return col;
+}
+
static sql_table *
table_dup(sql_trans *tr, int flag, sql_table *ot, sql_schema *s)
{
@@ -3408,7 +3576,7 @@
sql_table *
sql_trans_create_table(sql_trans *tr, sql_schema *s, char *name, char *sql,
int tt, bit system, int persistence, int commit_action, int sz)
{
- sql_table *t = create_sql_table(name, tt, system, persistence,
commit_action);
+ sql_table *t = create_sql_table(NULL, name, tt, system, persistence,
commit_action);
sql_schema *syss = find_sql_schema(tr, isGlobalTable(t)?"sys":"tmp");
sql_table *systable = find_sql_table(syss, "_tables");
sht ca;
@@ -3440,12 +3608,103 @@
return t;
}
+sql_key *
+create_sql_kc(sql_allocator *sa, sql_key *k, sql_column *c)
+{
+ sql_kc *kc = SA_ZNEW(sa, sql_kc);
+
+ kc->c = c;
+ kc->trunc = 0;
+ list_append(k->columns, kc);
+ if (k->idx)
+ create_sql_ic(sa, k->idx, c);
+ if (k->type == pkey)
+ c->null = 0;
+ return k;
+}
+
+sql_ukey *
+create_sql_ukey(sql_allocator *sa, sql_table *t, char *name, key_type kt)
+{
+ sql_key *nk = NULL;
+ sql_ukey *tk;
+
+ nk = (kt != fkey) ? (sql_key *) SA_ZNEW(sa, sql_ukey) : (sql_key *)
SA_ZNEW(sa, sql_fkey);
+ tk = (sql_ukey *) nk;
+ assert(name);
+
+ base_init(&nk->base, next_oid(), TR_NEW, name);
+
+ nk->type = kt;
+ nk->columns = list_new(sa);
+ nk->idx = NULL;
+ nk->t = t;
+
+ tk->keys = NULL;
+ if (nk->type == pkey)
+ t->pkey = tk;
+ cs_add(&t->keys, nk, TR_NEW);
+ return tk;
+}
+
+sql_fkey *
+create_sql_fkey(sql_allocator *sa, sql_table *t, char *name, key_type kt,
sql_key *rkey, int on_delete, int on_update)
+{
+ sql_key *nk;
+ sql_fkey *fk = NULL;
+ sql_ukey *uk = (sql_ukey *) rkey;
+
+ nk = (kt != fkey) ? (sql_key *) SA_ZNEW(sa, sql_ukey) : (sql_key *)
SA_ZNEW(sa, sql_fkey);
+
+ assert(name);
+ base_init(&nk->base, next_oid(), TR_NEW, name);
+ nk->type = kt;
+ nk->columns = list_new(sa);
+ nk->t = t;
+ nk->idx = create_sql_idx(sa, t, name, (nk->type == fkey) ? join_idx :
hash_idx);
+ nk->idx->key = nk;
+
+ fk = (sql_fkey *) nk;
+
+ fk->on_delete = on_delete;
+ fk->on_update = on_update;
+
+ fk->rkey = uk;
+ cs_add(&t->keys, nk, TR_NEW);
+ return (sql_fkey*) nk;
+}
+
+sql_idx *
+create_sql_ic(sql_allocator *sa, sql_idx *i, sql_column *c)
+{
+ sql_kc *ic = SA_ZNEW(sa, sql_kc);
+
+ ic->c = c;
+ ic->trunc = 0;
+ list_append(i->columns, ic);
+ return i;
+}
+
+sql_idx *
+create_sql_idx(sql_allocator *sa, sql_table *t, char *name, idx_type it)
+{
+ sql_idx *ni = SA_ZNEW(sa, sql_idx);
+
+ base_init(&ni->base, next_oid(), TR_NEW, name);
+ ni->columns = list_new(sa);
+ ni->t = t;
+ ni->type = it;
+ ni->key = NULL;
+ cs_add(&t->idxs, ni, TR_NEW);
+ return ni;
+}
+
sql_column *
-create_sql_column(sql_table *t, char *name, sql_subtype *tpe)
+create_sql_column(sql_allocator *sa, sql_table *t, char *name, sql_subtype
*tpe)
{
- sql_column *col = ZNEW(sql_column);
- base_init(&col->base, next_oid(), TR_NEW, name);
+ sql_column *col = (sa)?SA_ZNEW(sa, sql_column):ZNEW(sql_column);
+ base_init(&col->base, next_oid(), TR_NEW, name);
col->type = *tpe;
col->def = NULL;
col->null = 1;
@@ -3527,7 +3786,7 @@
if (!tpe)
return NULL;
- col = create_sql_column(t, name, tpe );
+ col = create_sql_column(NULL, t, name, tpe );
if (isTable(col->t))
store_funcs.create_col(tr, col);
@@ -3540,6 +3799,36 @@
return col;
}
+void
+drop_sql_column(sql_table *t, int id, int drop_action)
+{
+ node *n = list_find_base_id(t->columns.set, id);
+ sql_column *col = n->data;
+
+ col->drop_action = drop_action;
+ cs_del(&t->columns, n, TR_OLD);
+}
+
+void
+drop_sql_idx(sql_table *t, int id)
+{
+ node *n = list_find_base_id(t->idxs.set, id);
+
+ cs_del(&t->idxs, n, TR_OLD);
+}
+
+void
+drop_sql_key(sql_table *t, int id, int drop_action)
+{
+ node *n = list_find_base_id(t->keys.set, id);
+ sql_key *k = n->data;
+
+ k->drop_action = drop_action;
+ cs_del(&t->keys, n, TR_OLD);
+}
+
+
+
void
sql_trans_drop_column(sql_trans *tr, sql_table *t, int id, int drop_action)
{
@@ -3811,6 +4100,38 @@
}
sql_key *
+key_create_done(sql_allocator *sa, sql_key *k)
+{
+ node *n;
+ sql_idx *i;
+
+ /* for now we only mark the end of unique/primary key definitions */
+ if (k->type == fkey)
+ return k;
+
+ if ((i = table_has_idx(k->t, k->columns)) != NULL) {
+ /* use available hash, or use the order */
+ if (hash_index(i->type)) {
+ k->idx = i;
+ if (!k->idx->key)
+ k->idx->key = k;
+ }
+ return k;
+ }
+
+ /* we need to create an index */
+ k->idx = create_sql_idx(sa, k->t, k->base.name, hash_idx);
+ k->idx->key = k;
+
+ for (n=k->columns->h; n; n = n->next) {
+ sql_kc *kc = n->data;
+
+ create_sql_ic(sa, k->idx, kc->c);
+ }
+ return k;
+}
+
+sql_key *
sql_trans_key_done(sql_trans *tr, sql_key *k)
{
node *n;
@@ -3901,7 +4222,8 @@
if (ni->type == isclustered) {
t->cluster= ni;
- if (store_funcs.count_col(t->columns.set->h->data) == 0)
+ if (!isDeclaredTable(t) &&
+ store_funcs.count_col(t->columns.set->h->data) == 0)
t->clustered = 1;
/* TODO save clustered on disk */
}
@@ -3909,9 +4231,10 @@
cs_add(&t->idxs, ni, TR_NEW);
list_append(t->s->idxs, ni);
- if (isTable(ni->t) && idx_is_column(ni->type))
+ if (!isDeclaredTable(t) && isTable(ni->t) && idx_is_column(ni->type))
store_funcs.create_idx(tr, ni);
- table_funcs.table_insert(tr, sysidx, &ni->base.id, &t->base.id,
&ni->type, ni->base.name);
+ if (!isDeclaredTable(t))
+ table_funcs.table_insert(tr, sysidx, &ni->base.id, &t->base.id,
&ni->type, ni->base.name);
ni->base.wtime = t->base.wtime = t->s->base.wtime = tr->wtime =
tr->stime;
if (isGlobalTable(t))
tr->schema_updates ++;
@@ -3919,7 +4242,7 @@
}
sql_idx *
-sql_trans_create_ic(sql_trans *tr, sql_idx * i, sql_column *c /*, extra
options such as trunc */ )
+sql_trans_create_ic(sql_trans *tr, sql_idx * i, sql_column *c)
{
sql_kc *ic = ZNEW(sql_kc);
int nr = list_length(i->columns);
@@ -3931,7 +4254,6 @@
ic->trunc = 0;
list_append(i->columns, ic);
-
if (hash_index(i->type) && list_length(i->columns) > 1) {
/* Correct the unique flag of the keys first column */
c->unique = list_length(i->columns);
@@ -4077,16 +4399,13 @@
}
}
-sql_sequence *
-sql_trans_create_sequence(sql_trans *tr, sql_schema *s, char *name, lng start,
lng min, lng max, lng inc, lng cacheinc, bit cycle )
+sql_sequence *
+create_sql_sequence(sql_allocator *sa, sql_schema *s, char *name, lng start,
lng min, lng max, lng inc, lng cacheinc, bit cycle)
{
- sql_sequence *seq = ZNEW(sql_sequence);
- sql_schema *syss = find_sql_schema(tr, "sys");
- sql_table *sysseqs = find_sql_table(syss, "sequences");
+ sql_sequence *seq = (sa)?SA_ZNEW(sa, sql_sequence):ZNEW(sql_sequence);
assert(name);
base_init(&seq->base, next_oid(), TR_NEW, name);
-
seq->start = start;
seq->minvalue = min;
seq->maxvalue = max;
@@ -4095,10 +4414,18 @@
seq->cycle = cycle;
seq->s = s;
- cs_add(&s->seqs, seq, TR_NEW);
+ return seq;
+}
- table_funcs.table_insert(tr, sysseqs, &seq->base.id, &s->base.id,
seq->base.name, &seq->start, &seq->minvalue, &seq->maxvalue, &seq->increment,
&seq->cacheinc, &seq->cycle);
+sql_sequence *
+sql_trans_create_sequence(sql_trans *tr, sql_schema *s, char *name, lng start,
lng min, lng max, lng inc, lng cacheinc, bit cycle )
+{
+ sql_schema *syss = find_sql_schema(tr, "sys");
+ sql_table *sysseqs = find_sql_table(syss, "sequences");
+ sql_sequence *seq = create_sql_sequence(NULL, s, name, start, min, max,
inc, cacheinc, cycle);
+ cs_add(&s->seqs, seq, TR_NEW);
+ table_funcs.table_insert(tr, sysseqs, &seq->base.id, &s->base.id,
seq->base.name, &seq->start, &seq->minvalue, &seq->maxvalue, &seq->increment,
&seq->cacheinc, &seq->cycle);
s->base.wtime = tr->wtime = tr->stime;
return seq;
}
Index: sql_storage.h
===================================================================
RCS file: /cvsroot/monetdb/sql/src/storage/sql_storage.h,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- sql_storage.h 7 Jan 2010 15:24:33 -0000 1.63
+++ sql_storage.h 10 Jan 2010 15:33:35 -0000 1.64
@@ -39,7 +39,8 @@
store_su, /* single user, read/write */
store_ro, /* multi user, read only */
store_suro, /* single user, read only */
- store_bpm /* bat partition manager */
+ store_bpm, /* bat partition manager */
+ store_tst
} store_type;
#define STORE_READONLY(st) ((st) == store_ro || (st) == store_suro)
@@ -311,13 +312,11 @@
extern sql_schema *sql_trans_create_schema(sql_trans *tr, char *name, int
auth_id, int owner);
extern void sql_trans_drop_schema(sql_trans *tr, int id, int drop_action);
-extern sql_table *create_sql_table(char *name, sht type, bit system, int
persistence, int commit_action);
extern sql_table *sql_trans_create_table(sql_trans *tr, sql_schema *s, char
*name, char *sql, int tt, bit system, int persistence, int commit_action, int
sz);
extern void sql_trans_drop_table(sql_trans *tr, sql_schema *s, int id, int
drop_action);
extern BUN sql_trans_clear_table(sql_trans *tr, sql_table *t);
-extern sql_column *create_sql_column(sql_table *t, char *nme, sql_subtype
*tpe);
extern sql_column *sql_trans_create_column(sql_trans *tr, sql_table *t, char
*name, sql_subtype *tpe);
extern void sql_trans_drop_column(sql_trans *tr, sql_table *t, int id, int
drop_action);
extern sql_column *sql_trans_alter_null(sql_trans *tr, sql_column *col, int
isnull);
@@ -340,6 +339,7 @@
extern sql_trigger * sql_trans_create_tc(sql_trans *tr, sql_trigger * i,
sql_column *c /*, extra options such as trunc */ );
extern void sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, int id, int
drop_action);
+extern sql_sequence *create_sql_sequence(sql_allocator *sa, sql_schema *s,
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle );
extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s,
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle );
extern void sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name,
int drop_action);
extern sql_sequence *sql_trans_alter_sequence(sql_trans *tr, sql_sequence
*seq, lng min, lng max, lng inc, lng cache, lng cycle);
@@ -364,4 +364,23 @@
extern int sql_trans_disconnect_catalog_ALL(sql_trans *tr);
extern list *sql_trans_get_connection(sql_trans *tr,int id, char *server, char
*db, char *db_alias, char *user);
+extern sql_table *create_sql_table(sql_allocator *sa, char *name, sht type,
bit system, int persistence, int commit_action);
+extern sql_column *create_sql_column(sql_allocator *sa, sql_table *t, char
*nme, sql_subtype *tpe);
+extern sql_ukey *create_sql_ukey(sql_allocator *sa, sql_table *t, char *nme,
key_type kt);
+extern sql_fkey *create_sql_fkey(sql_allocator *sa, sql_table *t, char *nme,
key_type kt, sql_key *rkey, int on_delete, int on_update );
+extern sql_key *create_sql_kc(sql_allocator *sa, sql_key *k, sql_column *c);
+extern sql_key * key_create_done(sql_allocator *sa, sql_key *k);
+
+extern sql_idx *create_sql_idx(sql_allocator *sa, sql_table *t, char *nme,
idx_type it);
+extern sql_idx *create_sql_ic(sql_allocator *sa, sql_idx *i, sql_column *c);
+/* for alter we need to duplicate a table */
+extern sql_table *dup_sql_table(sql_allocator *sa, sql_table *t);
+extern void drop_sql_column(sql_table *t, int id, int drop_action);
+extern void drop_sql_idx(sql_table *t, int id);
+extern void drop_sql_key(sql_table *t, int id, int drop_action);
+
+extern sql_column *sql_trans_copy_column(sql_trans *tr, sql_table *t,
sql_column *c);
+extern sql_key *sql_trans_copy_key(sql_trans *tr, sql_table *t, sql_key *k);
+extern sql_idx *sql_trans_copy_idx(sql_trans *tr, sql_table *t, sql_idx *i);
+
#endif /*SQL_STORAGE_H */
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins