Changeset: b9f02744410c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b9f02744410c
Modified Files:
        monetdb5/modules/atoms/pg_jsonpath/jsonpath_exec.c
Branch: json-extend
Log Message:

improve error handling a bit


diffs (84 lines):

diff --git a/monetdb5/modules/atoms/pg_jsonpath/jsonpath_exec.c 
b/monetdb5/modules/atoms/pg_jsonpath/jsonpath_exec.c
--- a/monetdb5/modules/atoms/pg_jsonpath/jsonpath_exec.c
+++ b/monetdb5/modules/atoms/pg_jsonpath/jsonpath_exec.c
@@ -403,7 +403,7 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                                        mut_val = 
yyjson_mut_int(cxt->mutable_doc, num.lnum);
                                                break;
                                        case jpiString:
-                                               mut_val = 
yyjson_mut_str(cxt->mutable_doc, jspGetString(jsp, NULL)); //TODO use _set_ for 
immutables
+                                               mut_val = 
yyjson_mut_str(cxt->mutable_doc, jspGetString(jsp, NULL));
                                                break;
                                        case jpiVariable:
                                                {
@@ -798,7 +798,6 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                                assert (yyjson_get_subtype(jb) 
== YYJSON_SUBTYPE_REAL);
                                                val = yyjson_get_real(jb);
                                        }
-                                       // TODO errors
                                        if (isinf(val) || isnan(val))
                                                RETURN_ERROR(ereport(ERROR,
                                                                                
         (errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
@@ -817,7 +816,12 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                        const char *tmp = yyjson_get_str(jb);
                                        size_t len = sizeof(dbl);
                                        dbl* pval = &val;
-                                       (void) dblFromStr(tmp, &len, &pval, 
true); /*TODO error handling*/
+
+                                       if (dblFromStr(tmp, &len, &pval, true) 
< 0)
+                                               RETURN_ERROR(ereport(ERROR,
+                                                                               
        (errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
+                                                                               
        errmsg("%s is not allowed for jsonpath item method .%s()",
+                                                                               
                        tmp, jspOperationName(jsp->type)))));
 
                                        if (isinf(val) || isnan(val))
                                                RETURN_ERROR(ereport(ERROR,
@@ -923,8 +927,10 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                                datum = (lng) dval;
                                        }
                                        else {
-                                               snprintf(cxt->_errmsg, 1024, 
"string %s does not represent valid number", src);
-                                               return jperError;
+                                               RETURN_ERROR(ereport(ERROR,
+                                                                               
        (errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
+                                                                               
        errmsg("%s is not allowed for jsonpath item method .%s()",
+                                                                               
                        src, jspOperationName(jsp->type)))));
                                        }
                                        res = jperOk;
                                }
@@ -973,7 +979,11 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                        const char *tmp = yyjson_get_str(jb);
                                        size_t len = sizeof(bit);
                                        bit* pbval = (bit*) &bval;
-                                       /*TODO error handling*/(void) 
bitFromStr(tmp, &len, &pbval, true);
+                                       if (bitFromStr(tmp, &len, &pbval, true) 
< 0)
+                                               RETURN_ERROR(ereport(ERROR,
+                                                                               
        (errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
+                                                                               
        errmsg("%s is not allowed for jsonpath item method .%s()",
+                                                                               
                        tmp, jspOperationName(jsp->type)))));
                                }
 
                                if (res == jperNotFound)
@@ -1017,7 +1027,8 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                        dbl* pnum = &num;
                                        if (dblFromStr(numstr, &len, &pnum, 
true) < 0)
                                                res = jperNotFound;
-                                       res = jperOk;
+                                       else
+                                               res = jperOk;
                                }
 
                                if (res == jperNotFound)
@@ -1058,7 +1069,12 @@ executeItemOptUnwrapTarget(JsonPathExecC
                                        const char* tmp = yyjson_get_str(jb);
                                        size_t len = sizeof(lng);
                                        lng* pdatum = &datum;
-                                       (void) lngFromStr(tmp, &len, &pdatum, 
true);
+
+                                       if (lngFromStr(tmp, &len, &pdatum, 
true) < 0)
+                                               RETURN_ERROR(ereport(ERROR,
+                                                                               
        (errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
+                                                                               
        errmsg("%s is not allowed for jsonpath item method .%s()",
+                                                                               
                        tmp, jspOperationName(jsp->type)))));
                                        res = jperOk;
                                }
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to