Changeset: f7b52a192588 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7b52a192588
Modified Files:
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_scenario.c
Branch: Dec2011
Log Message:

Add more error codes and make sure that sql.assert doesn't add superfluous code.


diffs (215 lines):

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
@@ -4542,7 +4542,7 @@ SQLstr_cast_(str *res, mvc *m, int eclas
                if (r) 
                        GDKfree(r);
                if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), p) != 0) {
-                       throw(SQL, "str_cast", "value too long for type 
(var)char(%d)", len);
+                       throw(SQL, "str_cast", "22001!value too long for type 
(var)char(%d)", len);
                } else {
                        r = GDKstrdup(str_nil);
                }
@@ -4707,7 +4707,7 @@ str @2_2_@1( @1 *res, @2 *v )
                return(MAL_SUCCEED);
        } else {
                throw(SQL, "convert",
-                       "value (" @4 ") exceeds limits of type @1", val);
+                       "22003!value (" @4 ") exceeds limits of type @1", val);
        }
 }
 
@@ -4741,7 +4741,7 @@ str bat@2_2_@1( int *res, int *bid )
                        if ((@3)(@1)val > (@3) GDK_@1_min && val > (@3) 
GDK_@1_min && val <= (@3) GDK_@1_max)   {
                                *o = (@1)val;
                        } else {
-                               msg= createException(SQL, "convert", "value (" 
@4 ") exceeds limits of type @1", val);
+                               msg= createException(SQL, "convert", 
"22003!value (" @4 ") exceeds limits of type @1", val);
                                break;
                        }
                }
@@ -4756,7 +4756,7 @@ str bat@2_2_@1( int *res, int *bid )
                                if ((@3)(@1)val > (@3) GDK_@1_min && val > (@3) 
GDK_@1_min && val <= (@3) GDK_@1_max)   {
                                        *o = (@1)val;
                                } else {
-                                       msg= createException(SQL, "convert", 
"value (" @4 ") exceeds limits of type @1", val);
+                                       msg= createException(SQL, "convert", 
"22003!value (" @4 ") exceeds limits of type @1", val);
                                        break;
                                }
                        }
@@ -4830,7 +4830,7 @@ str
        inlen += (s2-s1);
        if (p && inlen > p) {
                throw(SQL, "convert",
-                       "too many digits (%d > %d)", inlen, p);
+                       "22003!too many digits (%d > %d)", inlen, p);
        }
 
        /* since the @1 type is bigger than or equal to the @2 type, it will
@@ -5026,7 +5026,7 @@ str
        /* rounding is allowed */
        if (p && inlen > p) {
                throw(SQL, "convert",
-                       "too many digits (%d > %d)", inlen, p);
+                       "22003!too many digits (%d > %d)", inlen, p);
        }
        *res = (@1) r;
        return MAL_SUCCEED;
@@ -5122,7 +5122,7 @@ str
        inlen += (s2-s1);
        if (p && inlen > p) {
                throw(SQL, "convert",
-                       "too many digits (%d > %d)", inlen, p);
+                       "22003!too many digits (%d > %d)", inlen, p);
        }
 
        /* since the @1 type is bigger than or equal to the @2 type, it will
@@ -5299,7 +5299,7 @@ str
                return MAL_SUCCEED;
        } else {
                throw(SQL, "convert",
-                       "value (" LLFMT ") exceeds limits of type @1", val);
+                       "22003!value (" LLFMT ") exceeds limits of type @1", 
val);
        }
 }
 
@@ -5323,7 +5323,7 @@ str
        inlen += (s2-s1);
        if (p && inlen > p) {
                throw(SQL, "@2_2_@1",
-                       "too many digits (%d > %d)", inlen, p);
+                       "22003!too many digits (%d > %d)", inlen, p);
        }
 
        if(s2 > s1) 
@@ -5337,7 +5337,7 @@ str
                return MAL_SUCCEED;
        } else {
                throw(SQL, "convert",
-                       "value (" LLFMT ") exceeds limits of type @1", val);
+                       "22003!value (" LLFMT ") exceeds limits of type @1", 
val);
        }
 }
 
@@ -5385,7 +5385,7 @@ str bat@2_dec2_@1( int *res, int *s1, in
                                BATaccessEnd(b, USE_TAIL, MMAP_SEQUENTIAL);
                                BBPreleaseref(b->batCacheid);
                                BBPreleaseref(bn->batCacheid);
-                               throw(SQL, "convert", "value (" LLFMT ") 
exceeds limits of type @1", (lng) val);
+                               throw(SQL, "convert", "22003!value (" LLFMT ") 
exceeds limits of type @1", (lng) val);
                        }
                }
        } else{
@@ -5405,7 +5405,7 @@ str bat@2_dec2_@1( int *res, int *s1, in
                                        BATaccessEnd(b, USE_TAIL, 
MMAP_SEQUENTIAL);
                                        BBPreleaseref(b->batCacheid);
                                        BBPreleaseref(bn->batCacheid);
-                                       throw(SQL, "convert", "value (" LLFMT 
") exceeds limits of type @1", (lng) val);
+                                       throw(SQL, "convert", "22003!value (" 
LLFMT ") exceeds limits of type @1", (lng) val);
                                }
                        }
                }
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
@@ -341,7 +341,7 @@ error(stream *out, char *str)
        return 0;
 }
 
-#define TRANS_ABORTED "!25005:current transaction is aborted (please 
ROLLBACK)\n"
+#define TRANS_ABORTED "!25005!current transaction is aborted (please 
ROLLBACK)\n"
 
 static int
 handle_error(mvc *m, stream *out, int pstatus)
@@ -1762,8 +1762,21 @@ SQLassert(Client cntxt, MalBlkPtr mb, Ma
        (void) cntxt;
        (void)mb;
        if (*flg){
+               const char *sqlstate = "M0M29!";
                /* mdbDump(mb,stk,pci);*/
-               throw(SQL, "assert", "M0M29!%s", *msg);
+               if (strlen(*msg) > 6 && (*msg)[5] == '!' &&
+                   (('0' <= (*msg)[0] && (*msg)[0] <= '9') ||
+                    ('A' <= (*msg)[0] && (*msg)[0] <= 'Z')) &&
+                   (('0' <= (*msg)[1] && (*msg)[1] <= '9') ||
+                    ('A' <= (*msg)[1] && (*msg)[1] <= 'Z')) &&
+                   (('0' <= (*msg)[2] && (*msg)[2] <= '9') ||
+                    ('A' <= (*msg)[2] && (*msg)[2] <= 'Z')) &&
+                   (('0' <= (*msg)[3] && (*msg)[3] <= '9') ||
+                    ('A' <= (*msg)[3] && (*msg)[3] <= 'Z')) &&
+                   (('0' <= (*msg)[4] && (*msg)[4] <= '9') ||
+                    ('A' <= (*msg)[4] && (*msg)[4] <= 'Z')))
+                       sqlstate = "";
+               throw(SQL, "assert", "%s%s", sqlstate, *msg);
        }
        return MAL_SUCCEED;
 }
@@ -1775,8 +1788,21 @@ SQLassertInt(Client cntxt, MalBlkPtr mb,
        (void) cntxt;
        (void)mb;
        if (*flg){
+               const char *sqlstate = "M0M29!";
                /* mdbDump(mb,stk,pci);*/
-               throw(SQL, "assert", "M0M29!%s", *msg);
+               if (strlen(*msg) > 6 && (*msg)[5] == '!' &&
+                   (('0' <= (*msg)[0] && (*msg)[0] <= '9') ||
+                    ('A' <= (*msg)[0] && (*msg)[0] <= 'Z')) &&
+                   (('0' <= (*msg)[1] && (*msg)[1] <= '9') ||
+                    ('A' <= (*msg)[1] && (*msg)[1] <= 'Z')) &&
+                   (('0' <= (*msg)[2] && (*msg)[2] <= '9') ||
+                    ('A' <= (*msg)[2] && (*msg)[2] <= 'Z')) &&
+                   (('0' <= (*msg)[3] && (*msg)[3] <= '9') ||
+                    ('A' <= (*msg)[3] && (*msg)[3] <= 'Z')) &&
+                   (('0' <= (*msg)[4] && (*msg)[4] <= '9') ||
+                    ('A' <= (*msg)[4] && (*msg)[4] <= 'Z')))
+                       sqlstate = "";
+               throw(SQL, "assert", "%s%s", sqlstate, *msg);
        }
        return MAL_SUCCEED;
 }
@@ -1788,8 +1814,21 @@ SQLassertWrd(Client cntxt, MalBlkPtr mb,
        (void) cntxt;
        (void)mb;
        if (*flg){
+               const char *sqlstate = "M0M29!";
                /* mdbDump(mb,stk,pci);*/
-               throw(SQL, "assert", "M0M29!%s", *msg);
+               if (strlen(*msg) > 6 && (*msg)[5] == '!' &&
+                   (('0' <= (*msg)[0] && (*msg)[0] <= '9') ||
+                    ('A' <= (*msg)[0] && (*msg)[0] <= 'Z')) &&
+                   (('0' <= (*msg)[1] && (*msg)[1] <= '9') ||
+                    ('A' <= (*msg)[1] && (*msg)[1] <= 'Z')) &&
+                   (('0' <= (*msg)[2] && (*msg)[2] <= '9') ||
+                    ('A' <= (*msg)[2] && (*msg)[2] <= 'Z')) &&
+                   (('0' <= (*msg)[3] && (*msg)[3] <= '9') ||
+                    ('A' <= (*msg)[3] && (*msg)[3] <= 'Z')) &&
+                   (('0' <= (*msg)[4] && (*msg)[4] <= '9') ||
+                    ('A' <= (*msg)[4] && (*msg)[4] <= 'Z')))
+                       sqlstate = "";
+               throw(SQL, "assert", "%s%s", sqlstate, *msg);
        }
        return MAL_SUCCEED;
 }
@@ -1801,8 +1840,21 @@ SQLassertLng(Client cntxt, MalBlkPtr mb,
        (void) cntxt;
        (void)mb;
        if (*flg){
+               const char *sqlstate = "M0M29!";
                /* mdbDump(mb,stk,pci);*/
-               throw(SQL, "assert", "M0M29!%s", *msg);
+               if (strlen(*msg) > 6 && (*msg)[5] == '!' &&
+                   (('0' <= (*msg)[0] && (*msg)[0] <= '9') ||
+                    ('A' <= (*msg)[0] && (*msg)[0] <= 'Z')) &&
+                   (('0' <= (*msg)[1] && (*msg)[1] <= '9') ||
+                    ('A' <= (*msg)[1] && (*msg)[1] <= 'Z')) &&
+                   (('0' <= (*msg)[2] && (*msg)[2] <= '9') ||
+                    ('A' <= (*msg)[2] && (*msg)[2] <= 'Z')) &&
+                   (('0' <= (*msg)[3] && (*msg)[3] <= '9') ||
+                    ('A' <= (*msg)[3] && (*msg)[3] <= 'Z')) &&
+                   (('0' <= (*msg)[4] && (*msg)[4] <= '9') ||
+                    ('A' <= (*msg)[4] && (*msg)[4] <= 'Z')))
+                       sqlstate = "";
+               throw(SQL, "assert", "%s%s", sqlstate, *msg);
        }
        return MAL_SUCCEED;
 }
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to