Changeset: 4079ebbbc553 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4079ebbbc553 Modified Files: sql/server/sql_atom.c Branch: Jun2020 Log Message:
Use atom storage for more accurate results in trivial operations diffs (250 lines): diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c --- a/sql/server/sql_atom.c +++ b/sql/server/sql_atom.c @@ -1337,67 +1337,7 @@ atom_is_zero(atom *a) { if (a->isnull) return 0; - switch (a->tpe.type->localtype) { - case TYPE_bte: - return a->data.val.btval == 0; - case TYPE_sht: - return a->data.val.shval == 0; - case TYPE_int: - return a->data.val.ival == 0; - case TYPE_lng: - return a->data.val.lval == 0; -#ifdef HAVE_HGE - case TYPE_hge: - return a->data.val.hval == 0; -#endif - case TYPE_flt: - return a->data.val.fval == 0; - case TYPE_dbl: - return a->data.val.dval == 0; - default: - break; - } - return 0; -} - -int -atom_is_true(atom *a) -{ - if (a->isnull) - return 0; - switch (a->tpe.type->localtype) { - case TYPE_bit: - return a->data.val.btval != 0; - case TYPE_bte: - return a->data.val.btval != 0; - case TYPE_sht: - return a->data.val.shval != 0; - case TYPE_int: - return a->data.val.ival != 0; - case TYPE_lng: - return a->data.val.lval != 0; -#ifdef HAVE_HGE - case TYPE_hge: - return a->data.val.hval != 0; -#endif - case TYPE_flt: - return a->data.val.fval != 0; - case TYPE_dbl: - return a->data.val.dval != 0; - default: - break; - } - return 0; -} - -int -atom_is_false( atom *a ) -{ - if (a->isnull) - return 0; - switch(a->tpe.type->localtype) { - case TYPE_bit: - return a->data.val.btval == 0; + switch (ATOMstorage(a->tpe.type->localtype)) { case TYPE_bte: return a->data.val.btval == 0; case TYPE_sht: @@ -1415,9 +1355,66 @@ atom_is_false( atom *a ) case TYPE_dbl: return a->data.val.dval == 0; default: - break; + return 0; } - return 0; +} + +int +atom_is_true(atom *a) +{ + if (a->isnull) + return 0; + switch (ATOMstorage(a->tpe.type->localtype)) { + case TYPE_bte: + return a->data.val.btval != 0; + case TYPE_sht: + return a->data.val.shval != 0; + case TYPE_int: + return a->data.val.ival != 0; + case TYPE_lng: + return a->data.val.lval != 0; +#ifdef HAVE_HGE + case TYPE_hge: + return a->data.val.hval != 0; +#endif + case TYPE_flt: + return a->data.val.fval != 0; + case TYPE_dbl: + return a->data.val.dval != 0; + case TYPE_str: + return strcmp(a->data.val.sval, "") != 0; + default: + return 0; + } +} + +int +atom_is_false(atom *a) +{ + if (a->isnull) + return 0; + switch (ATOMstorage(a->tpe.type->localtype)) { + case TYPE_bte: + return a->data.val.btval == 0; + case TYPE_sht: + return a->data.val.shval == 0; + case TYPE_int: + return a->data.val.ival == 0; + case TYPE_lng: + return a->data.val.lval == 0; +#ifdef HAVE_HGE + case TYPE_hge: + return a->data.val.hval == 0; +#endif + case TYPE_flt: + return a->data.val.fval == 0; + case TYPE_dbl: + return a->data.val.dval == 0; + case TYPE_str: + return strcmp(a->data.val.sval, "") == 0; + default: + return 0; + } } atom * @@ -1426,79 +1423,43 @@ atom_zero_value(sql_allocator *sa, sql_s void *ret = NULL; atom *res = NULL; + bte bval = 0; + sht sval = 0; + int ival = 0; + lng lval = 0; #ifdef HAVE_HGE hge hval = 0; #endif - lng lval = 0; - int ival = 0; - sht sval = 0; - bte bbval = 0; - bit bval = 0; flt fval = 0; dbl dval = 0; - switch (tpe->type->eclass) { - case EC_BIT: - { - ret = &bval; - break; - } - case EC_POS: - case EC_NUM: - case EC_DEC: - case EC_SEC: - case EC_MONTH: - switch (tpe->type->localtype) { + switch (ATOMstorage(tpe->type->localtype)) { + case TYPE_bte: + ret = &bval; + break; + case TYPE_sht: + ret = &sval; + break; + case TYPE_int: + ret = &ival; + break; + case TYPE_lng: + ret = &lval; + break; #ifdef HAVE_HGE - case TYPE_hge: - { - ret = &hval; - break; - } + case TYPE_hge: + ret = &hval; + break; #endif - case TYPE_lng: - { - ret = &lval; - break; - } - case TYPE_int: - { - ret = &ival; - break; - } - case TYPE_sht: - { - ret = &sval; - break; - } - case TYPE_bte: - { - ret = &bbval; - break; - } - default: - break; - } - break; - case EC_FLT: - switch (tpe->type->localtype) { - case TYPE_flt: - { - ret = &fval; - break; - } - case TYPE_dbl: - { - ret = &dval; - break; - } - default: - break; - } - break; - default: - break; - } //no support for strings and blobs zero value + case TYPE_flt: + ret = &fval; + break; + case TYPE_dbl: + ret = &dval; + break; + default: /* no support for strings and blobs zero value */ + break; + } if (ret != NULL) { res = atom_create(sa); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list