From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: "n.pettik" <korablev@tarantool.org>, tarantool-patches@freelists.org Subject: [tarantool-patches] Re: [PATCH 2/9] sql: disallow text values participate in sum() aggregate Date: Mon, 22 Apr 2019 21:02:22 +0300 [thread overview] Message-ID: <6484927f-90fc-666f-7516-f11005f09d2c@tarantool.org> (raw) In-Reply-To: <D4EBA48D-A684-4308-940E-8C27C1A6D800@tarantool.org> Hi! Thanks for the fixes! > diff --git a/src/box/sql/func.c b/src/box/sql/func.c > index b86a95d9a..9adfeec67 100644 > --- a/src/box/sql/func.c > +++ b/src/box/sql/func.c > @@ -1495,24 +1495,34 @@ static void > sumStep(sql_context * context, int argc, sql_value ** argv) > { > SumCtx *p; > - int type; > assert(argc == 1); > UNUSED_PARAMETER(argc); > p = sql_aggregate_context(context, sizeof(*p)); > - type = sql_value_numeric_type(argv[0]); > - if (p && type != SQL_NULL) { > - p->cnt++; > - if (type == SQL_INTEGER) { > - i64 v = sql_value_int64(argv[0]); > - p->rSum += v; > - if ((p->approx | p->overflow) == 0 > - && sqlAddInt64(&p->iSum, v)) { > - p->overflow = 1; > - } > - } else { > - p->rSum += sql_value_double(argv[0]); > - p->approx = 1; > + assert(p != NULL); Why are you sure, that p != NULL? sql_aggregate_context() on first invocation allocates memory, and it can fail. > + int type = sql_value_type(argv[0]); > + if (type == SQL_NULL) > + return; I've fixed the comment above and also I see, that sumStep is rewritten almost completely, so it is time to convert it to Tarantool style. See the diff below and on the branch in a separate commit. (Note, 'sql_value' below is not prepended with 'struct' because it is a typedef - compiler curses). ================================================================== diff --git a/src/box/sql/func.c b/src/box/sql/func.c index 9adfeec67..0f9e228dc 100644 --- a/src/box/sql/func.c +++ b/src/box/sql/func.c @@ -1492,15 +1492,13 @@ struct SumCtx { * it overflows an integer. */ static void -sumStep(sql_context * context, int argc, sql_value ** argv) +sum_step(struct sql_context *context, int argc, sql_value **argv) { - SumCtx *p; assert(argc == 1); UNUSED_PARAMETER(argc); - p = sql_aggregate_context(context, sizeof(*p)); - assert(p != NULL); + struct SumCtx *p = sql_aggregate_context(context, sizeof(*p)); int type = sql_value_type(argv[0]); - if (type == SQL_NULL) + if (type == SQL_NULL || p == NULL) return; if (type != SQL_FLOAT && type != SQL_INTEGER) { if (mem_apply_numeric_type(argv[0]) != 0) { @@ -1514,10 +1512,10 @@ sumStep(sql_context * context, int argc, sql_value ** argv) } p->cnt++; if (type == SQL_INTEGER) { - i64 v = sql_value_int64(argv[0]); + int64_t v = sql_value_int64(argv[0]); p->rSum += v; if ((p->approx | p->overflow) == 0 && - sqlAddInt64(&p->iSum, v)) { + sqlAddInt64(&p->iSum, v) != 0) { p->overflow = 1; } } else { @@ -1870,9 +1868,12 @@ sqlRegisterBuiltinFunctions(void) FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc, FIELD_TYPE_SCALAR), FUNCTION_COLL(substr, 2, 0, 0, substrFunc), FUNCTION_COLL(substr, 3, 0, 0, substrFunc), - AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize, FIELD_TYPE_NUMBER), - AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize, FIELD_TYPE_NUMBER), - AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize, FIELD_TYPE_NUMBER), + AGGREGATE(sum, 1, 0, 0, sum_step, sumFinalize, + FIELD_TYPE_NUMBER), + AGGREGATE(total, 1, 0, 0, sum_step, totalFinalize, + FIELD_TYPE_NUMBER), + AGGREGATE(avg, 1, 0, 0, sum_step, avgFinalize, + FIELD_TYPE_NUMBER), AGGREGATE2(count, 0, 0, 0, countStep, countFinalize, SQL_FUNC_COUNT, FIELD_TYPE_INTEGER), AGGREGATE(count, 1, 0, 0, countStep, countFinalize,
next prev parent reply other threads:[~2019-04-22 18:02 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-14 15:03 [tarantool-patches] [PATCH 0/9] Introduce type BOOLEAN in SQL Nikita Pettik 2019-04-14 15:03 ` [tarantool-patches] [PATCH 1/9] sql: refactor mem_apply_numeric_type() Nikita Pettik 2019-04-14 15:04 ` [tarantool-patches] [PATCH 2/9] sql: disallow text values participate in sum() aggregate Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:54 ` n.pettik 2019-04-22 18:02 ` Vladislav Shpilevoy [this message] 2019-04-23 19:58 ` n.pettik 2019-04-14 15:04 ` [tarantool-patches] [PATCH 3/9] sql: use msgpack types instead of custom ones Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:54 ` n.pettik 2019-04-22 18:02 ` Vladislav Shpilevoy 2019-04-23 19:58 ` n.pettik 2019-04-14 15:04 ` [tarantool-patches] [PATCH 4/9] sql: introduce type boolean Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:54 ` n.pettik 2019-04-22 18:02 ` Vladislav Shpilevoy 2019-04-23 19:58 ` n.pettik 2019-04-23 21:06 ` Vladislav Shpilevoy 2019-04-14 15:04 ` [tarantool-patches] [PATCH 5/9] sql: improve type determination for column meta Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:54 ` n.pettik 2019-04-22 18:02 ` Vladislav Shpilevoy 2019-04-23 19:58 ` n.pettik 2019-04-14 15:04 ` [tarantool-patches] [PATCH 6/9] sql: make comparison predicate return boolean Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:54 ` n.pettik 2019-04-14 15:04 ` [tarantool-patches] [PATCH 7/9] sql: make predicates accept and " Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:55 ` n.pettik 2019-04-14 15:04 ` [tarantool-patches] [PATCH 9/9] sql: make <search condition> accept only boolean Nikita Pettik 2019-04-16 14:12 ` [tarantool-patches] " Vladislav Shpilevoy 2019-04-18 17:55 ` n.pettik 2019-04-22 18:02 ` Vladislav Shpilevoy 2019-04-23 19:59 ` n.pettik 2019-04-23 21:06 ` Vladislav Shpilevoy 2019-04-23 22:01 ` n.pettik [not found] ` <b2a84f129c2343d3da3311469cbb7b20488a21c2.1555252410.git.korablev@tarantool.org> 2019-04-16 14:12 ` [tarantool-patches] Re: [PATCH 8/9] sql: make LIKE predicate return boolean result Vladislav Shpilevoy 2019-04-18 17:55 ` n.pettik 2019-04-22 18:02 ` Vladislav Shpilevoy 2019-04-23 19:58 ` n.pettik 2019-04-24 10:28 ` [tarantool-patches] Re: [PATCH 0/9] Introduce type BOOLEAN in SQL Vladislav Shpilevoy 2019-04-25 8:46 ` Kirill Yukhin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=6484927f-90fc-666f-7516-f11005f09d2c@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='[tarantool-patches] Re: [PATCH 2/9] sql: disallow text values participate in sum() aggregate' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox