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

Reply via email to