LCOV - code coverage report
Current view: top level - sql/server - sql_symbol.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 144 144 100.0 %
Date: 2024-04-25 20:03:45 Functions: 17 17 100.0 %

          Line data    Source code
       1             : /*
       2             :  * SPDX-License-Identifier: MPL-2.0
       3             :  *
       4             :  * This Source Code Form is subject to the terms of the Mozilla Public
       5             :  * License, v. 2.0.  If a copy of the MPL was not distributed with this
       6             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       7             :  *
       8             :  * Copyright 2024 MonetDB Foundation;
       9             :  * Copyright August 2008 - 2023 MonetDB B.V.;
      10             :  * Copyright 1997 - July 2008 CWI.
      11             :  */
      12             : 
      13             : #include "monetdb_config.h"
      14             : #include "sql_mem.h"
      15             : #include "sql_symbol.h"
      16             : #include "sql_parser.h"
      17             : 
      18             : static symbol *
      19    11379403 : symbol_init(symbol *s, tokens token, symtype type )
      20             : {
      21    11379403 :         s->token = token;
      22    11379403 :         s->type = type;
      23    11379403 :         return s;
      24             : }
      25             : 
      26             : symbol *
      27      264644 : symbol_create(sql_allocator *sa, tokens token, char *data)
      28             : {
      29      264644 :         symbol *s = SA_NEW(sa, symbol);
      30             : 
      31      264644 :         if (s) {
      32      264644 :                 symbol_init(s, token, type_string);
      33      264644 :                 s->data.sval = data;
      34             :         }
      35      264644 :         return s;
      36             : }
      37             : 
      38             : symbol *
      39     8017727 : symbol_create_list(sql_allocator *sa, tokens token, dlist *data)
      40             : {
      41     8017727 :         symbol *s = SA_NEW(sa, symbol);
      42             : 
      43     8017723 :         if (s) {
      44     8017723 :                 symbol_init(s, token, type_list);
      45     8017723 :                 s->data.lval = data;
      46             :         }
      47     8017723 :         return s;
      48             : }
      49             : 
      50             : symbol *
      51        6171 : symbol_create_int(sql_allocator *sa, tokens token, int data)
      52             : {
      53        6171 :         symbol *s = SA_NEW(sa, symbol);
      54             : 
      55        6171 :         if (s) {
      56        6171 :                 symbol_init(s, token, type_int);
      57        6171 :                 s->data.i_val = data;
      58             :         }
      59        6171 :         return s;
      60             : }
      61             : 
      62             : symbol *
      63         166 : symbol_create_lng(sql_allocator *sa, tokens token, lng data)
      64             : {
      65         166 :         symbol *s = SA_NEW(sa, symbol);
      66             : 
      67         166 :         if (s) {
      68         166 :                 symbol_init(s, token, type_lng);
      69         166 :                 s->data.l_val = data;
      70             :         }
      71         166 :         return s;
      72             : }
      73             : 
      74             : symbol *
      75      100816 : symbol_create_symbol(sql_allocator *sa, tokens token, symbol *data)
      76             : {
      77      100816 :         symbol *s = SA_NEW(sa, symbol);
      78             : 
      79      100816 :         if (s) {
      80      100816 :                 symbol_init(s, token, type_symbol);
      81      100816 :                 s->data.sym = data;
      82             :         }
      83      100816 :         return s;
      84             : }
      85             : 
      86             : static dnode *
      87    30081034 : dnode_create(sql_allocator *sa )
      88             : {
      89    30081034 :         dnode *n = SA_NEW(sa, dnode);
      90             : 
      91    30080544 :         if (n)
      92    30080544 :                 n->next = NULL;
      93    30080544 :         return n;
      94             : }
      95             : 
      96             : static dnode *
      97     9295413 : dnode_create_string(sql_allocator *sa, const char *data)
      98             : {
      99    18590822 :         dnode *n = dnode_create(sa);
     100             : 
     101     9295409 :         if (n) {
     102     9295409 :                 n->data.sval = (char*)data;
     103     9295409 :                 n->type = type_string;
     104             :         }
     105     9295409 :         return n;
     106             : }
     107             : static dnode *
     108     4613025 : dnode_create_list(sql_allocator *sa, dlist *data)
     109             : {
     110     9226051 :         dnode *n = dnode_create(sa);
     111             : 
     112     4613026 :         if (n) {
     113     4613026 :                 n->data.lval = data;
     114     4613026 :                 n->type = type_list;
     115             :         }
     116     4613026 :         return n;
     117             : }
     118             : static dnode *
     119     2789206 : dnode_create_int(sql_allocator *sa, int data)
     120             : {
     121     5578412 :         dnode *n = dnode_create(sa);
     122             : 
     123     2789206 :         if (n) {
     124     2789206 :                 n->data.i_val = data;
     125     2789206 :                 n->type = type_int;
     126             :         }
     127     2789206 :         return n;
     128             : }
     129             : static dnode *
     130        2485 : dnode_create_lng(sql_allocator *sa, lng data)
     131             : {
     132        4970 :         dnode *n = dnode_create(sa);
     133             : 
     134        2485 :         if (n) {
     135        2485 :                 n->data.l_val = data;
     136        2485 :                 n->type = type_lng;
     137             :         }
     138        2485 :         return n;
     139             : }
     140             : static dnode *
     141    12355109 : dnode_create_symbol(sql_allocator *sa, symbol *data)
     142             : {
     143    24710241 :         dnode *n = dnode_create(sa);
     144             : 
     145    12355132 :         if (n) {
     146    12355132 :                 n->data.sym = data;
     147    12355132 :                 n->type = type_symbol;
     148             :         }
     149    12355132 :         return n;
     150             : }
     151             : 
     152             : static dnode *
     153     1026495 : dnode_create_type(sql_allocator *sa, sql_subtype *data)
     154             : {
     155     1026495 :         dnode *n = dnode_create(sa);
     156             : 
     157     1026495 :         if (n) {
     158     1026495 :                 if (data)
     159     1026492 :                         n->data.typeval = *data;
     160             :                 else
     161           3 :                         n->data.typeval.type = NULL;
     162     1026495 :                 n->type = type_type;
     163             :         }
     164     1026495 :         return n;
     165             : }
     166             : 
     167             : dlist *
     168    12598554 : dlist_create(sql_allocator *sa)
     169             : {
     170    12598554 :         dlist *l = SA_NEW(sa, dlist);
     171             : 
     172    12598495 :         if (l) {
     173    12598495 :                 l->h = l->t = NULL;
     174    12598495 :                 l->cnt = 0;
     175             :         }
     176    12598495 :         return l;
     177             : }
     178             : 
     179             : int
     180    12021876 : dlist_length(dlist *l)
     181             : {
     182    12021876 :         return l->cnt;
     183             : }
     184             : 
     185             : static dlist *
     186    30081753 : dlist_append_default(dlist *l, dnode *n)
     187             : {
     188    30081753 :         if (l->cnt) {
     189    17485817 :                 l->t->next = n;
     190             :         } else {
     191    12595936 :                 l->h = n;
     192             :         }
     193    30081753 :         l->t = n;
     194    30081753 :         l->cnt++;
     195    30081753 :         return l;
     196             : }
     197             : 
     198             : dlist *
     199     9295413 : dlist_append_string(sql_allocator *sa, dlist *l, const char *data)
     200             : {
     201     9295413 :         dnode *n = dnode_create_string(sa, data);
     202             : 
     203     9295409 :         if (!n)
     204             :                 return NULL;
     205    18590818 :         return dlist_append_default(l, n);
     206             : }
     207             : 
     208             : dlist *
     209     4613025 : dlist_append_list(sql_allocator *sa, dlist *l, dlist *data)
     210             : {
     211     4613025 :         dnode *n = dnode_create_list(sa, data);
     212             : 
     213     4613026 :         if (!n)
     214             :                 return NULL;
     215     9226052 :         return dlist_append_default(l, n);
     216             : }
     217             : 
     218             : dlist *
     219     2789206 : dlist_append_int(sql_allocator *sa, dlist *l, int data)
     220             : {
     221     2789206 :         dnode *n = dnode_create_int(sa, data);
     222             : 
     223     2789206 :         if (!n)
     224             :                 return NULL;
     225     5578412 :         return dlist_append_default(l, n);
     226             : }
     227             : 
     228             : dlist *
     229        2485 : dlist_append_lng(sql_allocator *sa, dlist *l, lng data)
     230             : {
     231        2485 :         dnode *n = dnode_create_lng(sa, data);
     232             : 
     233        2485 :         if (!n)
     234             :                 return NULL;
     235        4970 :         return dlist_append_default(l, n);
     236             : }
     237             : 
     238             : dlist *
     239    12355109 : dlist_append_symbol(sql_allocator *sa, dlist *l, symbol *data)
     240             : {
     241    12355109 :         dnode *n = dnode_create_symbol(sa, data);
     242             : 
     243    12355132 :         if (!n)
     244             :                 return NULL;
     245    24710264 :         return dlist_append_default(l, n);
     246             : }
     247             : 
     248             : dlist *
     249     1026495 : dlist_append_type(sql_allocator *sa, dlist *l, sql_subtype *data)
     250             : {
     251     1026495 :         dnode *n = dnode_create_type(sa, data);
     252             : 
     253     1026495 :         if (!n)
     254             :                 return NULL;
     255     2052990 :         return dlist_append_default(l, n);
     256             : }
     257             : 
     258             : symbol *
     259      360322 : newSelectNode(sql_allocator *sa, int distinct, struct dlist *selection, struct dlist *into, symbol *from, symbol *where, symbol *groupby, symbol *having, symbol *orderby, symbol *name, symbol *limit, symbol *offset, symbol *sample, symbol *seed, symbol *window)
     260             : {
     261      360322 :         SelectNode *sn = SA_NEW(sa, SelectNode);
     262      360326 :         symbol *s = (symbol *) sn;
     263             : 
     264      360326 :         if (s) {
     265      360326 :                 symbol_init(s, SQL_SELECT, type_symbol);
     266      360326 :                 sn->distinct = distinct;
     267      360326 :                 sn->lateral = 0;
     268      360326 :                 sn->limit = limit;
     269      360326 :                 sn->offset = offset;
     270      360326 :                 sn->sample = sample;
     271      360326 :                 sn->seed = seed;
     272      360326 :                 sn->selection = selection;
     273      360326 :                 sn->into = into;
     274      360326 :                 sn->from = from;
     275      360326 :                 sn->where = where;
     276      360326 :                 sn->groupby = groupby;
     277      360326 :                 sn->having = having;
     278      360326 :                 sn->orderby = orderby;
     279      360326 :                 sn->name = name;
     280      360326 :                 sn->window = window;
     281             :         }
     282      360326 :         return s;
     283             : }
     284             : 
     285             : symbol *
     286     2629600 : newAtomNode(sql_allocator *sa, atom *data)
     287             : {
     288     2629600 :         AtomNode *an = SA_NEW(sa, AtomNode);
     289     2629557 :         symbol *s = (symbol *) an;
     290             : 
     291     2629557 :         if (s) {
     292     2629557 :                 symbol_init(s, SQL_ATOM, type_symbol);
     293     2629557 :                 an->a = data;
     294             :         }
     295     2629557 :         return s;
     296             : }

Generated by: LCOV version 1.14