Changeset: 730056831c16 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=730056831c16
Modified Files:
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_scenario.h
Branch: default
Log Message:

Simplify SQLtrans calls.

Back then I didn't know that we could freely change the SQL layer ABI.


diffs (104 lines):

diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -474,13 +474,7 @@ SQLstatementIntern(Client c, str *expr, 
 
        /* create private allocator */
        m->sa = NULL;
-       SQLtrans(m);
-       if(*m->errstr) {
-               if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
-                       msg = createException(SQL, "sql.statement", "%s", 
m->errstr);
-               else
-                       msg = createException(SQL, "sql.statement", 
SQLSTATE(42000) "%s", m->errstr);
-               *m->errstr=0;
+       if ((msg = SQLtrans(m)) != MAL_SUCCEED) {
                if (inited)
                        SQLresetClient(c);
                return msg;
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -636,32 +636,30 @@ SQLautocommit(mvc *m)
        return msg;
 }
 
-void
+str
 SQLtrans(mvc *m)
 {
        m->caching = m->cache;
        if (!m->session->active) {
                sql_session *s;
 
-               if(mvc_trans(m) < 0) {
-                       (void) sql_error(m, 02, SQLSTATE(HY001) "Allocation 
failure while starting the transaction");
-                       return;
-               }
+               if (mvc_trans(m) < 0)
+                       throw(SQL, "sql.trans", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                s = m->session;
                if (!s->schema) {
                        if (s->schema_name)
                                GDKfree(s->schema_name);
                        s->schema_name = monet5_user_get_def_schema(m, 
m->user_id);
-                       if(!s->schema_name) {
+                       if (!s->schema_name) {
                                mvc_cancel_session(m);
-                               (void) sql_error(m, 02, SQLSTATE(HY001) 
"Allocation failure while starting the transaction");
-                               return;
+                               throw(SQL, "sql.trans", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                        }
                        assert(s->schema_name);
                        s->schema = find_sql_schema(s->tr, s->schema_name);
                        assert(s->schema);
                }
        }
+       return MAL_SUCCEED;
 }
 
 #ifdef HAVE_EMBEDDED
@@ -1007,16 +1005,11 @@ SQLparser(Client c)
 #endif
        m = be->mvc;
        m->type = Q_PARSE;
-       if (be->language != 'X')
-               SQLtrans(m);
-       if(*m->errstr) {
-               if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
-                       msg = createException(PARSE, "SQLparser", "%s", 
m->errstr);
-               else
-                       msg = createException(PARSE, "SQLparser", 
SQLSTATE(42000) "%s", m->errstr);
-               *m->errstr=0;
-               c->mode = FINISHCLIENT;
-               return msg;
+       if (be->language != 'X') {
+               if ((msg = SQLtrans(m)) != MAL_SUCCEED) {
+                       c->mode = FINISHCLIENT;
+                       return msg;
+               }
        }
        pstatus = m->session->status;
 
@@ -1038,7 +1031,8 @@ SQLparser(Client c)
                        n = sscanf(in->buf + in->pos + 7, "%d %d %d", &v, &off, 
&len);
 
                if (n == 2 || n == 3) {
-                       mvc_export_chunk(be, out, v, off, n == 3 ? len : 
m->reply_size);
+                       if (mvc_export_chunk(be, out, v, off, n == 3 ? len : 
m->reply_size))
+                               throw(SQL, "SQLparser", SQLSTATE(45000) "Result 
set construction failed");
 
                        in->pos = in->len;      /* HACK: should use parsed 
length */
                        return MAL_SUCCEED;
diff --git a/sql/backends/monet5/sql_scenario.h 
b/sql/backends/monet5/sql_scenario.h
--- a/sql/backends/monet5/sql_scenario.h
+++ b/sql/backends/monet5/sql_scenario.h
@@ -19,7 +19,7 @@ sql5_export str SQLprelude(Client cntxt,
 sql5_export str SQLepilogue(void *ret);
 
 sql5_export str SQLautocommit(mvc *m);
-sql5_export void SQLtrans(mvc *m);
+sql5_export str SQLtrans(mvc *m);
 
 sql5_export str SQLexit(Client c);
 sql5_export str SQLexitClient(Client c);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to