LCOV - code coverage report
Current view: top level - sql/backends/monet5 - sql_cast_impl_int.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 44 55 80.0 %
Date: 2021-10-13 02:24:04 Functions: 137 275 49.8 %

          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             : /* ! ENSURE THAT THESE LOCAL MACROS ARE UNDEFINED AT THE END OF THIS FILE ! */
      10             : 
      11             : /* stringify token */
      12             : #define _STRNG_(s) #s
      13             : #define STRNG(t) _STRNG_(t)
      14             : 
      15             : /* concatenate two, three or four tokens */
      16             : #define CONCAT_2(a,b)           a##b
      17             : #define CONCAT_3(a,b,c)         a##b##c
      18             : #define CONCAT_4(a,b,c,d)       a##b##c##d
      19             : 
      20             : #define NIL(t)                          CONCAT_2(t,_nil)
      21             : #define ISNIL(t)                        CONCAT_3(is_,t,_nil)
      22             : #define TPE(t)                          CONCAT_2(TYPE_,t)
      23             : #define GDKmin(t)                       CONCAT_3(GDK_,t,_min)
      24             : #define GDKmax(t)                       CONCAT_3(GDK_,t,_max)
      25             : #define FUN(a,b,c,d)            CONCAT_4(a,b,c,d)
      26             : #define IS_NUMERIC(t)           CONCAT_2(t,_is_numeric)
      27             : 
      28             : static inline str
      29        1425 : FUN(do_,TP1,_dec2dec_,TP2) (TP2 *restrict res, int s1, TP1 val, int p, int s2)
      30             : {
      31             :         ValRecord v1, v2;
      32             : 
      33        1425 :         VALset(&v1, TPE(TP1), &val);
      34        1425 :         v2.vtype = TPE(TP2);
      35        1425 :         if (VARconvert(&v2, &v1, true, s1, s2, p) != GDK_SUCCEED)
      36          17 :                 throw(SQL, STRNG(FUN(,TP1,_2_,TP2)), GDK_EXCEPTION);
      37        1408 :         *res = *(TP2 *) VALptr(&v2);
      38        1408 :         return MAL_SUCCEED;
      39             : }
      40             : 
      41             : #if IS_NUMERIC(TP1)
      42             : str
      43         234 : FUN(,TP1,_dec2_,TP2) (TP2 *res, const int *s1, const TP1 *v)
      44             : {
      45         234 :         return FUN(do_,TP1,_dec2dec_,TP2) (res, *s1, *v, 0, 0);
      46             : }
      47             : 
      48             : str
      49         666 : FUN(,TP1,_dec2dec_,TP2) (TP2 *res, const int *S1, const TP1 *v, const int *d2, const int *S2)
      50             : {
      51         666 :         return FUN(do_,TP1,_dec2dec_,TP2) (res, *S1, *v, *d2, *S2);
      52             : }
      53             : #endif
      54             : 
      55             : str
      56         525 : FUN(,TP1,_num2dec_,TP2) (TP2 *res, const TP1 *v, const int *d2, const int *s2)
      57             : {
      58         525 :         return FUN(do_,TP1,_dec2dec_,TP2)(res, 0, *v, *d2, *s2);
      59             : }
      60             : 
      61             : #if IS_NUMERIC(TP1)
      62             : str
      63         170 : FUN(bat,TP1,_dec2_,TP2) (bat *res, const int *s1, const bat *bid, const bat *sid)
      64             : {
      65             :         BAT *b, *s = NULL, *bn;
      66             : 
      67         170 :         if ((b = BATdescriptor(*bid)) == NULL) {
      68           0 :                 throw(SQL, "batcalc."STRNG(FUN(,TP1,_dec2_,TP2)), SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      69             :         }
      70         170 :         if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {
      71           0 :                 BBPunfix(b->batCacheid);
      72           0 :                 throw(SQL, "batcalc."STRNG(FUN(,TP1,_dec2_,TP2)), SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      73             :         }
      74         170 :         bn = BATconvert(b, s, TPE(TP2), true, *s1, 0, 0);
      75         170 :         BBPunfix(b->batCacheid);
      76         170 :         if (s)
      77          19 :                 BBPunfix(s->batCacheid);
      78         170 :         if (bn == NULL)
      79           0 :                 throw(SQL, "sql."STRNG(FUN(dec,TP1,_2_,TP2)), GDK_EXCEPTION);
      80         170 :         BBPkeepref(*res = bn->batCacheid);
      81         170 :         return MAL_SUCCEED;
      82             : }
      83             : 
      84             : str
      85        1007 : FUN(bat,TP1,_dec2dec_,TP2) (bat *res, const int *S1, const bat *bid, const bat *sid, const int *d2, const int *S2)
      86             : {
      87             :         BAT *b, *s = NULL, *bn;
      88             : 
      89        1007 :         if ((b = BATdescriptor(*bid)) == NULL) {
      90           0 :                 throw(SQL, "batcalc."STRNG(FUN(,TP1,_dec2dec_,TP2)), SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      91             :         }
      92        1006 :         if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {
      93           0 :                 BBPunfix(b->batCacheid);
      94           0 :                 throw(SQL, "batcalc."STRNG(FUN(,TP1,_dec2_,TP2)), SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
      95             :         }
      96        1006 :         bn = BATconvert(b, s, TPE(TP2), true, *S1, *S2, *d2);
      97        1007 :         BBPunfix(b->batCacheid);
      98        1007 :         if (s)
      99         432 :                 BBPunfix(s->batCacheid);
     100        1007 :         if (bn == NULL)
     101           0 :                 throw(SQL, "sql."STRNG(FUN(,TP1,_dec2dec_,TP2)), GDK_EXCEPTION);
     102             : 
     103        1007 :         BBPkeepref(*res = bn->batCacheid);
     104        1007 :         return MAL_SUCCEED;
     105             : }
     106             : #endif
     107             : 
     108             : str
     109        1398 : FUN(bat,TP1,_num2dec_,TP2) (bat *res, const bat *bid, const bat *sid, const int *d2, const int *s2)
     110             : {
     111             :         BAT *b, *s = NULL, *bn;
     112             : 
     113        1398 :         if ((b = BATdescriptor(*bid)) == NULL) {
     114           0 :                 throw(SQL, "batcalc."STRNG(FUN(,TP1,_num2dec_,TP2)), SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
     115             :         }
     116        1398 :         if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {
     117           0 :                 BBPunfix(b->batCacheid);
     118           0 :                 throw(SQL, "batcalc."STRNG(FUN(,TP1,_dec2_,TP2)), SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
     119             :         }
     120        1398 :         bn = BATconvert(b, s, TPE(TP2), true, 0, *s2, *d2);
     121        1398 :         BBPunfix(b->batCacheid);
     122        1397 :         if (s)
     123         231 :                 BBPunfix(s->batCacheid);
     124        1398 :         if (bn == NULL)
     125           1 :                 throw(SQL, "sql."STRNG(FUN(,TP1,_num2dec_,TP2)), GDK_EXCEPTION);
     126        1397 :         BBPkeepref(*res = bn->batCacheid);
     127        1397 :         return MAL_SUCCEED;
     128             : }
     129             : 
     130             : /* undo local defines */
     131             : #undef FUN
     132             : #undef NIL
     133             : #undef ISNIL
     134             : #undef TPE
     135             : #undef GDKmin
     136             : #undef GDKmax
     137             : #undef CONCAT_2
     138             : #undef CONCAT_3
     139             : #undef CONCAT_4
     140             : #undef STRNG
     141             : #undef _STRNG_

Generated by: LCOV version 1.14