Changeset: e601d1b0c86f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e601d1b0c86f
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.mx
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/storage/bat/bat_storage.c
sql/storage/sql_storage.h
Branch: newstorage
Log Message:
implemented sql_statement and pattern "claim"
diffs (151 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -3068,7 +3068,7 @@ rel2bin_insert( mvc *sql, sql_rel *rel,
} else {
s = stmt_aggr(sql->sa, insert->op1, NULL, NULL,
sql_bind_aggr(sql->sa, sql->session->schema, "count", NULL), 1, 0);
}
- list_prepend(l, stmt_claim(sql->sa, s));
+ list_prepend(l, stmt_claim(sql->sa, t, s));
if (ddl)
list_prepend(l, ddl);
else
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -262,7 +262,7 @@ command getVersion(clientid:int):lng
address mvc_getVersion
comment "Return the database version identifier for a client";
-pattern append(mvc:int, cnt:wrd):int
+pattern claim(mvc:int, sname:str, tname:str, cnt:wrd):int
address mvc_claim
comment "Claim number of buns.";
@@ -3292,13 +3292,27 @@ mvc_claim(Client cntxt, MalBlkPtr mb, Ma
int *res = (int*)getArgReference(stk, pci, 0);
mvc *m = NULL;
str msg = getSQLContext(cntxt,mb, &m, NULL);
- //wrd cnt = *(wrd *)getArgReference(stk, pci, 2);
+ str sname = *(str *)getArgReference(stk, pci, 2);
+ str tname = *(str *)getArgReference(stk, pci, 3);
+ wrd cnt = *(wrd *)getArgReference(stk, pci, 4);
+
+ sql_table *t;
+ sql_schema *s;
*res = 0;
if ((msg = checkSQLContext(cntxt)) != NULL)
return msg;
- /* implementation here */
+ s = mvc_bind_schema(m,sname);
+ if (s == NULL)
+ throw(SQL,"sql.claim","3F000!Schema missing");
+
+ t = mvc_bind_table(m, s, tname);
+ if (t == NULL)
+ throw(SQL, "sql.claim", "42S02!Table missing");
+
+ store_funcs.claim_tab(m->session->tr, t, cnt);
+
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1810,10 +1810,16 @@ static int
break;
case st_claim : {
int c = _dumpstmt(sql, mb, s->op1);
+ sql_table *t = s->op4.tval;
+ str mod = sqlRef;
- q = newStmt1(mb, sqlRef, "claim");
+ q = newStmt1(mb, mod, "claim");
+
+ getArg(q,0) = newTmpVariable(mb, TYPE_int);
q = pushArgument(mb, q, sql->mvc_var);
- /* ToDo add table */
+
+ q = pushSchema(mb, q, t);
+ q = pushStr(mb, q, t->base.name);
q = pushArgument(mb, q, c);
sql->mvc_var = s->nr = getDestVar(q);
} break;
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -541,11 +541,12 @@ stmt_append_col(sql_allocator *sa, sql_c
}
stmt *
-stmt_claim(sql_allocator *sa, stmt *b) {
+stmt_claim(sql_allocator *sa, sql_table *t, stmt *b) {
stmt *s = stmt_create(sa, st_claim);
s->op1 = b;
+ s->op4.tval = t;
return s;
}
diff --git a/sql/backends/monet5/sql_statement.h
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -169,7 +169,7 @@ extern stmt *stmt_append_idx(sql_allocat
extern stmt *stmt_update_col(sql_allocator *sa, sql_column *c, stmt *tids,
stmt *upd);
extern stmt *stmt_update_idx(sql_allocator *sa, sql_idx *i, stmt *tids, stmt
*upd);
extern stmt *stmt_delete(sql_allocator *sa, sql_table *t, stmt *b);
-extern stmt *stmt_claim(sql_allocator *sa, stmt *b);
+extern stmt *stmt_claim(sql_allocator *sa, sql_table *t, stmt *b);
extern stmt *stmt_append(sql_allocator *sa, stmt *c, stmt *values);
extern stmt *stmt_table_clear(sql_allocator *sa, sql_table *t);
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -623,6 +623,15 @@ dup_timestamps(sql_trans *tr, sql_table
return ok;
}
+static int
+claim_tab(sql_trans *tr, sql_table *t, int cnt) {
+
+ (void)tr;
+ (void)t;
+
+ return cnt;
+}
+
static void
append_col(sql_trans *tr, sql_column *c, void *i, int tpe)
{
@@ -2480,6 +2489,7 @@ bat_storage_init( store_functions *sf)
sf->update_col = (update_col_fptr)&update_col;
sf->update_idx = (update_idx_fptr)&update_idx;
sf->delete_tab = (delete_tab_fptr)&delete_tab;
+ sf->claim_tab = (claim_tab_fptr)&claim_tab;
sf->count_del = (count_del_fptr)&count_del;
sf->count_col = (count_col_fptr)&count_col;
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -107,6 +107,7 @@ typedef void (*append_idx_fptr) (sql_tra
typedef void (*update_col_fptr) (sql_trans *tr, sql_column *c, void *tids,
void *d, int t);
typedef void (*update_idx_fptr) (sql_trans *tr, sql_idx *i, void *tids, void
*d, int t);
typedef void (*delete_tab_fptr) (sql_trans *tr, sql_table *t, void *d, int
tpe);
+typedef void (*claim_tab_fptr) (sql_trans *tr, sql_table *t, int cnt);
/*
-- count number of rows in column (excluding the deletes)
@@ -189,6 +190,7 @@ typedef struct store_functions {
update_col_fptr update_col;
update_idx_fptr update_idx;
delete_tab_fptr delete_tab;
+ claim_tab_fptr claim_tab;
count_del_fptr count_del;
count_col_fptr count_col;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list