LCOV - code coverage report
Current view: top level - sql/backends/monet5 - sql_cast.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 140 202 69.3 %
Date: 2021-10-13 02:24:04 Functions: 7 7 100.0 %

          Line data    Source code
       1             : /*
       2             :  * This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0.  If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       5             :  *
       6             :  * Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
       7             :  */
       8             : 
       9             : #include "monetdb_config.h"
      10             : #include "sql.h"
      11             : #include "sql_cast.h"
      12             : #include "sql_result.h"
      13             : #include "mal_instruction.h"
      14             : 
      15             : static inline str
      16          25 : str_2_blob_imp(blob **r, size_t *rlen, const str val)
      17             : {
      18          25 :         ssize_t e = ATOMfromstr(TYPE_blob, (void**)r, rlen, val, false);
      19          25 :         if (e < 0 || (ATOMcmp(TYPE_blob, *r, ATOMnilptr(TYPE_blob)) == 0 && !strNil(val))) {
      20           0 :                 if (strNil(val))
      21           0 :                         throw(SQL, "calc.str_2_blob", SQLSTATE(42000) "Conversion of NULL string to blob failed");
      22           0 :                 throw(SQL, "calc.str_2_blob", SQLSTATE(42000) "Conversion of string '%s' to blob failed", val);
      23             :         }
      24             :         return MAL_SUCCEED;
      25             : }
      26             : 
      27             : str
      28          18 : str_2_blob(blob **res, const str *val)
      29             : {
      30          18 :         size_t rlen = 0;
      31             :         str msg;
      32             : 
      33          18 :         *res = NULL;
      34          18 :         if ((msg = str_2_blob_imp(res, &rlen, *val))) {
      35           0 :                 GDKfree(*res);
      36           0 :                 *res = NULL;
      37             :         }
      38          18 :         return msg;
      39             : }
      40             : 
      41             : str
      42           7 : batstr_2_blob(bat *res, const bat *bid, const bat *sid)
      43             : {
      44             :         BAT *b = NULL, *s = NULL, *dst = NULL;
      45             :         BATiter bi;
      46             :         char *msg = NULL;
      47             :         struct canditer ci;
      48             :         BUN q;
      49             :         oid off;
      50           7 :         blob *r = NULL;
      51           7 :         size_t rlen = 0;
      52             :         bool nils = false;
      53             : 
      54           7 :         if ((b = BATdescriptor(*bid)) == NULL) {
      55           0 :                 msg = createException(SQL, "batcalc.str_2_blob", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      56           0 :                 goto bailout;
      57             :         }
      58           7 :         if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {
      59           0 :                 msg = createException(SQL, "batcalc.str_2_blob", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      60           0 :                 goto bailout;
      61             :         }
      62           7 :         off = b->hseqbase;
      63           7 :         q = canditer_init(&ci, b, s);
      64           7 :         if (!(dst = COLnew(ci.hseq, TYPE_blob, q, TRANSIENT))) {
      65           0 :                 msg = createException(SQL, "batcalc.str_2_blob", SQLSTATE(HY013) MAL_MALLOC_FAIL);
      66           0 :                 goto bailout;
      67             :         }
      68             : 
      69           7 :         bi = bat_iterator(b);
      70           7 :         if (ci.tpe == cand_dense) {
      71          14 :                 for (BUN i = 0; i < q; i++) {
      72           7 :                         oid p = (canditer_next_dense(&ci) - off);
      73           7 :                         str v = (str) BUNtvar(bi, p);
      74             : 
      75           7 :                         if ((msg = str_2_blob_imp(&r, &rlen, v)))
      76           0 :                                 goto bailout1;
      77           7 :                         if (tfastins_nocheckVAR(dst, i, r) != GDK_SUCCEED) {
      78           0 :                                 msg = createException(SQL, "batcalc.str_2_blob", SQLSTATE(HY013) MAL_MALLOC_FAIL);
      79           0 :                                 goto bailout1;
      80             :                         }
      81           7 :                         nils |= strNil(v);
      82             :                 }
      83             :         } else {
      84           0 :                 for (BUN i = 0; i < q; i++) {
      85           0 :                         oid p = (canditer_next(&ci) - off);
      86           0 :                         str v = (str) BUNtvar(bi, p);
      87             : 
      88           0 :                         if ((msg = str_2_blob_imp(&r, &rlen, v)))
      89           0 :                                 goto bailout1;
      90           0 :                         if (tfastins_nocheckVAR(dst, i, r) != GDK_SUCCEED) {
      91           0 :                                 msg = createException(SQL, "batcalc.str_2_blob", SQLSTATE(HY013) MAL_MALLOC_FAIL);
      92           0 :                                 goto bailout1;
      93             :                         }
      94           0 :                         nils |= strNil(v);
      95             :                 }
      96             :         }
      97           0 : bailout1:
      98           7 :         bat_iterator_end(&bi);
      99             : 
     100           7 : bailout:
     101           7 :         GDKfree(r);
     102           7 :         if (dst && !msg) {
     103           7 :                 BATsetcount(dst, q);
     104           7 :                 dst->tnil = nils;
     105           7 :                 dst->tnonil = !nils;
     106           7 :                 dst->tkey = b->tkey;
     107           7 :                 dst->tsorted = BATcount(dst) <= 1;
     108           7 :                 dst->trevsorted = BATcount(dst) <= 1;
     109           7 :                 BBPkeepref(*res = dst->batCacheid);
     110           0 :         } else if (dst)
     111           0 :                 BBPreclaim(dst);
     112           7 :         if (b)
     113           7 :                 BBPunfix(b->batCacheid);
     114           7 :         if (s)
     115           0 :                 BBPunfix(s->batCacheid);
     116           7 :         return msg;
     117             : }
     118             : 
     119             : /* TODO get max size for all from type */
     120             : static size_t
     121         689 : str_buf_initial_capacity(sql_class eclass, int digits)
     122             : {
     123         689 :         switch (eclass)
     124             :         {
     125          62 :                 case EC_BIT:
     126             :                         /* should hold false for clob type and (var)char > 4 */
     127          62 :                         return (digits == 0 || digits > 4) ? 8 : 2;
     128             :                 case EC_SEC:
     129             :                 case EC_MONTH:
     130             :                 case EC_NUM:
     131             :                 case EC_DEC:
     132             :                 case EC_POS:
     133             :                 case EC_TIME:
     134             :                 case EC_TIME_TZ:
     135             :                 case EC_DATE:
     136             :                 case EC_TIMESTAMP:
     137             :                 case EC_TIMESTAMP_TZ:
     138             :                         return 64;
     139          58 :                 case EC_FLT:
     140          58 :                         return 128;
     141         106 :                 case EC_CHAR:
     142             :                 case EC_STRING:
     143             :                 case EC_BLOB:
     144             :                 case EC_GEOM:
     145         106 :                         return 1024;
     146          50 :                 default:
     147          50 :                         return 128;
     148             :         }
     149             : }
     150             : 
     151             : static inline str
     152     1914278 : SQLstr_cast_any_type(str *r, size_t *rlen, mvc *m, sql_class eclass, int d, int s, int has_tz, ptr p, int tpe, int len)
     153             : {
     154     1914278 :         ssize_t sz = convert2str(m, eclass, d, s, has_tz, p, tpe, r, rlen);
     155     1982920 :         if ((len > 0 && sz > (ssize_t) len) || sz < 0)
     156          20 :                 throw(SQL, "str_cast", SQLSTATE(22001) "value too long for type (var)char(%d)", len);
     157             :         return MAL_SUCCEED;
     158             : }
     159             : 
     160             : str
     161         700 : SQLstr_cast(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
     162             : {
     163         700 :         str *res = getArgReference_str(stk, pci, 0), r = NULL, msg;
     164         700 :         sql_class eclass = (sql_class)*getArgReference_int(stk, pci, 1);
     165         700 :         int d = *getArgReference_int(stk, pci, 2), s = *getArgReference_int(stk, pci, 3);
     166         700 :         int has_tz = *getArgReference_int(stk, pci, 4), tpe = getArgType(mb, pci, 5), digits = *getArgReference_int(stk, pci, 6);
     167         700 :         ptr p = getArgReference(stk, pci, 5);
     168         700 :         mvc *m = NULL;
     169         700 :         bool from_str = EC_VARCHAR(eclass) || tpe == TYPE_str;
     170             : 
     171         700 :         if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
     172             :                 return msg;
     173         700 :         if ((msg = checkSQLContext(cntxt)) != NULL)
     174             :                 return msg;
     175         700 :         if (ATOMextern(tpe))
     176         462 :                 p = *(ptr *) p;
     177             : 
     178         700 :         if (from_str) {
     179         460 :                 r = (str) p;
     180         592 :                 if (digits > 0 && !strNil(r) && UTF8_strlen(r) > digits)
     181          22 :                         throw(SQL, "calc.str_cast", SQLSTATE(22001) "value too long for type (var)char(%d)", digits);
     182             :         } else {
     183         240 :                 size_t rlen = MAX(str_buf_initial_capacity(eclass, digits), strlen(str_nil) + 1); /* don't reallocate on str_nil */
     184         240 :                 if (!(r = GDKmalloc(rlen)))
     185           2 :                         throw(SQL, "calc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     186         240 :                 if ((msg = SQLstr_cast_any_type(&r, &rlen, m, eclass, d, s, has_tz, p, tpe, digits)) != MAL_SUCCEED) {
     187           2 :                         GDKfree(r);
     188           2 :                         return msg;
     189             :                 }
     190             :         }
     191             : 
     192         676 :         *res = GDKstrdup(r);
     193         676 :         if (!from_str)
     194         238 :                 GDKfree(r);
     195             :         if (!res)
     196             :                 throw(SQL, "calc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     197             :         return MAL_SUCCEED;
     198             : }
     199             : 
     200             : #define SQLstr_cast_str(v, digits) \
     201             :         if (digits > 0 && UTF8_strlen(v) > digits) { \
     202             :                 msg = createException(SQL, "batcalc.str_cast", SQLSTATE(22001) "value too long for type (var)char(%d)", digits); \
     203             :                 goto bailout; \
     204             :         }
     205             : 
     206             : /* str SQLbatstr_cast(int *res, int *eclass, int *d1, int *s1, int *has_tz, int *bid, int *digits); */
     207             : str
     208         449 : SQLbatstr_cast(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
     209             : {
     210             :         BAT *b = NULL, *s = NULL, *dst = NULL;
     211             :         BATiter bi;
     212         449 :         mvc *m = NULL;
     213         449 :         str msg, r = NULL;
     214         449 :         bat *res = getArgReference_bat(stk, pci, 0);
     215         449 :         sql_class eclass = (sql_class) *getArgReference_int(stk, pci, 1);
     216         449 :         int d1 = *getArgReference_int(stk, pci, 2), s1 = *getArgReference_int(stk, pci, 3), has_tz = *getArgReference_int(stk, pci, 4);
     217         449 :         bat *bid = getArgReference_bat(stk, pci, 5), *sid = pci->argc == 7 ? NULL : getArgReference_bat(stk, pci, 6);
     218         449 :         int tpe = getBatType(getArgType(mb, pci, 5)), digits = pci->argc == 7 ? *getArgReference_int(stk, pci, 6) : *getArgReference_int(stk, pci, 7);
     219             :         struct canditer ci;
     220             :         BUN q;
     221             :         oid off;
     222         449 :         bool nils = false, from_str = EC_VARCHAR(eclass) || tpe == TYPE_str;
     223         449 :         size_t rlen = MAX(str_buf_initial_capacity(eclass, digits), strlen(str_nil) + 1); /* don't reallocate on str_nil */
     224             : 
     225         449 :         if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
     226             :                 return msg;
     227         449 :         if ((msg = checkSQLContext(cntxt)) != NULL)
     228             :                 return msg;
     229         449 :         if ((b = BATdescriptor(*bid)) == NULL) {
     230           0 :                 msg = createException(SQL, "batcalc.str", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
     231           0 :                 goto bailout;
     232             :         }
     233         449 :         if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {
     234           0 :                 msg = createException(SQL, "batcalc.str", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
     235           0 :                 goto bailout;
     236             :         }
     237         449 :         off = b->hseqbase;
     238         449 :         q = canditer_init(&ci, b, s);
     239         449 :         bi = bat_iterator(b);
     240             : 
     241         449 :         if (from_str && (!sid || is_bat_nil(*sid))) { /* from string case, just do validation, if right, return */
     242         326 :                 for (BUN i = 0; i < q; i++) {
     243         305 :                         str v = (str) BUNtvar(bi, i);
     244             : 
     245         305 :                         if (!strNil(v))
     246         296 :                                 SQLstr_cast_str(v, digits);
     247             :                 }
     248          21 :                 bat_iterator_end(&bi);
     249          22 :                 BBPkeepref(*res = b->batCacheid);
     250          22 :                 return MAL_SUCCEED;
     251             :         }
     252             : 
     253         427 :         if (!(dst = COLnew(ci.hseq, TYPE_str, q, TRANSIENT))) {
     254           0 :                 msg = createException(SQL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     255           0 :                 goto bailout1;
     256             :         }
     257             : 
     258         427 :         assert(rlen > 0);
     259         427 :         if (!from_str && !(r = GDKmalloc(rlen))) {
     260           0 :                 msg = createException(SQL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     261           0 :                 goto bailout1;
     262             :         }
     263             : 
     264         427 :         if (ci.tpe == cand_dense) {
     265         421 :                 if (from_str) { /* string to string */
     266           0 :                         for (BUN i = 0; i < q; i++) {
     267           0 :                                 oid p = (canditer_next_dense(&ci) - off);
     268           0 :                                 str v = (str) BUNtvar(bi, p);
     269             : 
     270           0 :                                 if (strNil(v)) {
     271           0 :                                         if (tfastins_nocheckVAR(dst, i, str_nil) != GDK_SUCCEED) {
     272           0 :                                                 msg = createException(MAL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     273           0 :                                                 goto bailout1;
     274             :                                         }
     275             :                                         nils = true;
     276             :                                 } else {
     277           0 :                                         SQLstr_cast_str(v, digits);
     278           0 :                                         if (tfastins_nocheckVAR(dst, i, v) != GDK_SUCCEED) {
     279           0 :                                                 msg = createException(SQL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     280           0 :                                                 goto bailout1;
     281             :                                         }
     282             :                                 }
     283             :                         }
     284             :                 } else { /* any other type to string */
     285     1918895 :                         for (BUN i = 0; i < q; i++) {
     286     1918492 :                                 oid p = (canditer_next_dense(&ci) - off);
     287     1918492 :                                 ptr v = BUNtail(bi, p);
     288             : 
     289     1918492 :                                 if ((msg = SQLstr_cast_any_type(&r, &rlen, m, eclass, d1, s1, has_tz, v, tpe, digits)) != MAL_SUCCEED)
     290          18 :                                         goto bailout1;
     291     1979445 :                                 if (tfastins_nocheckVAR(dst, i, r) != GDK_SUCCEED) {
     292           0 :                                         msg = createException(SQL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     293           0 :                                         goto bailout1;
     294             :                                 }
     295     3850053 :                                 nils |= strNil(r);
     296             :                         }
     297             :                 }
     298             :         } else {
     299           6 :                 if (from_str) { /* string to string */
     300           0 :                         for (BUN i = 0; i < q; i++) {
     301           0 :                                 oid p = (canditer_next(&ci) - off);
     302           0 :                                 str v = (str) BUNtvar(bi, p);
     303             : 
     304           0 :                                 if (strNil(v)) {
     305           0 :                                         if (tfastins_nocheckVAR(dst, i, str_nil) != GDK_SUCCEED) {
     306           0 :                                                 msg = createException(MAL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     307           0 :                                                 goto bailout1;
     308             :                                         }
     309             :                                         nils = true;
     310             :                                 } else {
     311           0 :                                         SQLstr_cast_str(v, digits);
     312           0 :                                         if (tfastins_nocheckVAR(dst, i, v) != GDK_SUCCEED) {
     313           0 :                                                 msg = createException(SQL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     314           0 :                                                 goto bailout1;
     315             :                                         }
     316             :                                 }
     317             :                         }
     318             :                 } else { /* any other type to string */
     319          18 :                         for (BUN i = 0; i < q; i++) {
     320          12 :                                 oid p = (canditer_next(&ci) - off);
     321          12 :                                 ptr v = BUNtail(bi, p);
     322             : 
     323          12 :                                 if ((msg = SQLstr_cast_any_type(&r, &rlen, m, eclass, d1, s1, has_tz, v, tpe, digits)) != MAL_SUCCEED)
     324           0 :                                         goto bailout1;
     325          12 :                                 if (tfastins_nocheckVAR(dst, i, r) != GDK_SUCCEED) {
     326           0 :                                         msg = createException(SQL, "batcalc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
     327           0 :                                         goto bailout1;
     328             :                                 }
     329          24 :                                 nils |= strNil(r);
     330             :                         }
     331             :                 }
     332             :         }
     333           6 : bailout1:
     334         427 :         bat_iterator_end(&bi);
     335             : 
     336         427 : bailout:
     337         427 :         GDKfree(r);
     338         427 :         if (dst && !msg) {
     339         409 :                 BATsetcount(dst, q);
     340         409 :                 dst->tnil = nils;
     341         409 :                 dst->tnonil = !nils;
     342         409 :                 dst->tkey = from_str ? b->tkey : BATcount(dst) <= 1;
     343         409 :                 dst->tsorted = from_str ? b->tsorted : BATcount(dst) <= 1;
     344         409 :                 dst->trevsorted = from_str ? b->trevsorted : BATcount(dst) <= 1;
     345         409 :                 BBPkeepref(*res = dst->batCacheid);
     346          18 :         } else if (dst)
     347          18 :                 BBPreclaim(dst);
     348         427 :         if (b)
     349         427 :                 BBPunfix(b->batCacheid);
     350         427 :         if (s)
     351          63 :                 BBPunfix(s->batCacheid);
     352             :         return msg;
     353             : }
     354             : 
     355             : #define flt_is_numeric 0
     356             : #define dbl_is_numeric 0
     357             : #define bte_is_numeric 1
     358             : #define sht_is_numeric 1
     359             : #define int_is_numeric 1
     360             : #define lng_is_numeric 1
     361             : #define hge_is_numeric 1
     362             : 
     363             : /* up casting */
     364             : 
     365             : #define TP1 bte
     366             : #define TP2 bte
     367             : #include "sql_cast_impl_int.h"
     368             : #undef TP2
     369             : #undef TP1
     370             : 
     371             : #define TP1 bte
     372             : #define TP2 sht
     373             : #include "sql_cast_impl_int.h"
     374             : #undef TP2
     375             : #undef TP1
     376             : 
     377             : #define TP1 sht
     378             : #define TP2 sht
     379             : #include "sql_cast_impl_int.h"
     380             : #undef TP2
     381             : #undef TP1
     382             : 
     383             : #define TP1 bte
     384             : #define TP2 int
     385             : #include "sql_cast_impl_int.h"
     386             : #undef TP2
     387             : #undef TP1
     388             : 
     389             : #define TP1 sht
     390             : #define TP2 int
     391             : #include "sql_cast_impl_int.h"
     392             : #undef TP2
     393             : #undef TP1
     394             : 
     395             : #define TP1 int
     396             : #define TP2 int
     397             : #include "sql_cast_impl_int.h"
     398             : #undef TP2
     399             : #undef TP1
     400             : 
     401             : #define TP1 bte
     402             : #define TP2 lng
     403             : #include "sql_cast_impl_int.h"
     404             : #undef TP2
     405             : #undef TP1
     406             : 
     407             : #define TP1 sht
     408             : #define TP2 lng
     409             : #include "sql_cast_impl_int.h"
     410             : #undef TP2
     411             : #undef TP1
     412             : 
     413             : #define TP1 int
     414             : #define TP2 lng
     415             : #include "sql_cast_impl_int.h"
     416             : #undef TP2
     417             : #undef TP1
     418             : 
     419             : #define TP1 lng
     420             : #define TP2 lng
     421             : #include "sql_cast_impl_int.h"
     422             : #undef TP2
     423             : #undef TP1
     424             : 
     425             : #ifdef HAVE_HGE
     426             : #define TP1 bte
     427             : #define TP2 hge
     428             : #include "sql_cast_impl_int.h"
     429             : #undef TP2
     430             : #undef TP1
     431             : 
     432             : #define TP1 sht
     433             : #define TP2 hge
     434             : #include "sql_cast_impl_int.h"
     435             : #undef TP2
     436             : #undef TP1
     437             : 
     438             : #define TP1 int
     439             : #define TP2 hge
     440             : #include "sql_cast_impl_int.h"
     441             : #undef TP2
     442             : #undef TP1
     443             : 
     444             : #define TP1 lng
     445             : #define TP2 hge
     446             : #include "sql_cast_impl_int.h"
     447             : #undef TP2
     448             : #undef TP1
     449             : 
     450             : #define TP1 hge
     451             : #define TP2 hge
     452             : #include "sql_cast_impl_int.h"
     453             : #undef TP2
     454             : #undef TP1
     455             : #endif
     456             : 
     457             : /* sql_cast_impl_down_from_flt */
     458             : 
     459             : #define round_float(x)  roundf(x)
     460             : 
     461             : #define TP1 flt
     462             : #define TP2 bte
     463             : #include "sql_cast_impl_int.h"
     464             : #undef TP2
     465             : #undef TP1
     466             : 
     467             : #define TP1 flt
     468             : #define TP2 sht
     469             : #include "sql_cast_impl_int.h"
     470             : #undef TP2
     471             : #undef TP1
     472             : 
     473             : #define TP1 flt
     474             : #define TP2 int
     475             : #include "sql_cast_impl_int.h"
     476             : #undef TP2
     477             : #undef TP1
     478             : 
     479             : #define TP1 flt
     480             : #define TP2 lng
     481             : #include "sql_cast_impl_int.h"
     482             : #undef TP2
     483             : #undef TP1
     484             : 
     485             : #ifdef HAVE_HGE
     486             : #define TP1 flt
     487             : #define TP2 hge
     488             : #include "sql_cast_impl_int.h"
     489             : #undef TP2
     490             : #undef TP1
     491             : #endif
     492             : 
     493             : #undef round_float
     494             : #define round_float(x)  round(x)
     495             : 
     496             : #define TP1 dbl
     497             : #define TP2 bte
     498             : #include "sql_cast_impl_int.h"
     499             : #undef TP2
     500             : #undef TP1
     501             : 
     502             : #define TP1 dbl
     503             : #define TP2 sht
     504             : #include "sql_cast_impl_int.h"
     505             : #undef TP2
     506             : #undef TP1
     507             : 
     508             : #define TP1 dbl
     509             : #define TP2 int
     510             : #include "sql_cast_impl_int.h"
     511             : #undef TP2
     512             : #undef TP1
     513             : 
     514             : #define TP1 dbl
     515             : #define TP2 lng
     516             : #include "sql_cast_impl_int.h"
     517             : #undef TP2
     518             : #undef TP1
     519             : 
     520             : #ifdef HAVE_HGE
     521             : #define TP1 dbl
     522             : #define TP2 hge
     523             : #include "sql_cast_impl_int.h"
     524             : #undef TP2
     525             : #undef TP1
     526             : #endif
     527             : 
     528             : /* sql_cast_impl_up_to_flt */
     529             : 
     530             : #define TP1 bte
     531             : #define TP2 flt
     532             : #include "sql_cast_impl_int.h"
     533             : #undef TP2
     534             : #undef TP1
     535             : 
     536             : #define TP1 sht
     537             : #define TP2 flt
     538             : #include "sql_cast_impl_int.h"
     539             : #undef TP2
     540             : #undef TP1
     541             : 
     542             : #define TP1 int
     543             : #define TP2 flt
     544             : #include "sql_cast_impl_int.h"
     545             : #undef TP2
     546             : #undef TP1
     547             : 
     548             : #define TP1 lng
     549             : #define TP2 flt
     550             : #include "sql_cast_impl_int.h"
     551             : #undef TP2
     552             : #undef TP1
     553             : 
     554             : #ifdef HAVE_HGE
     555             : #define TP1 hge
     556             : #define TP2 flt
     557             : #include "sql_cast_impl_int.h"
     558             : #undef TP2
     559             : #undef TP1
     560             : #endif
     561             : 
     562             : #define TP1 bte
     563             : #define TP2 dbl
     564             : #include "sql_cast_impl_int.h"
     565             : #undef TP2
     566             : #undef TP1
     567             : 
     568             : #define TP1 sht
     569             : #define TP2 dbl
     570             : #include "sql_cast_impl_int.h"
     571             : #undef TP2
     572             : #undef TP1
     573             : 
     574             : #define TP1 int
     575             : #define TP2 dbl
     576             : #include "sql_cast_impl_int.h"
     577             : #undef TP2
     578             : #undef TP1
     579             : 
     580             : #define TP1 lng
     581             : #define TP2 dbl
     582             : #include "sql_cast_impl_int.h"
     583             : #undef TP2
     584             : #undef TP1
     585             : 
     586             : #ifdef HAVE_HGE
     587             : #define TP1 hge
     588             : #define TP2 dbl
     589             : #include "sql_cast_impl_int.h"
     590             : #undef TP2
     591             : #undef TP1
     592             : #endif
     593             : 
     594             : #define TP1 sht
     595             : #define TP2 bte
     596             : #include "sql_cast_impl_int.h"
     597             : #undef TP2
     598             : #undef TP1
     599             : 
     600             : #define TP1 int
     601             : #define TP2 bte
     602             : #include "sql_cast_impl_int.h"
     603             : #undef TP2
     604             : #undef TP1
     605             : 
     606             : #define TP1 lng
     607             : #define TP2 bte
     608             : #include "sql_cast_impl_int.h"
     609             : #undef TP2
     610             : #undef TP1
     611             : 
     612             : #ifdef HAVE_HGE
     613             : #define TP1 hge
     614             : #define TP2 bte
     615             : #include "sql_cast_impl_int.h"
     616             : #undef TP2
     617             : #undef TP1
     618             : #endif
     619             : 
     620             : #define TP1 int
     621             : #define TP2 sht
     622             : #include "sql_cast_impl_int.h"
     623             : #undef TP2
     624             : #undef TP1
     625             : 
     626             : #define TP1 lng
     627             : #define TP2 sht
     628             : #include "sql_cast_impl_int.h"
     629             : #undef TP2
     630             : #undef TP1
     631             : 
     632             : #ifdef HAVE_HGE
     633             : #define TP1 hge
     634             : #define TP2 sht
     635             : #include "sql_cast_impl_int.h"
     636             : #undef TP2
     637             : #undef TP1
     638             : #endif
     639             : 
     640             : #define TP1 lng
     641             : #define TP2 int
     642             : #include "sql_cast_impl_int.h"
     643             : #undef TP2
     644             : #undef TP1
     645             : 
     646             : #ifdef HAVE_HGE
     647             : #define TP1 hge
     648             : #define TP2 int
     649             : #include "sql_cast_impl_int.h"
     650             : #undef TP2
     651             : #undef TP1
     652             : #endif
     653             : 
     654             : #ifdef HAVE_HGE
     655             : #define TP1 hge
     656             : #define TP2 lng
     657             : #include "sql_cast_impl_int.h"
     658             : #undef TP2
     659             : #undef TP1
     660             : #endif

Generated by: LCOV version 1.14