LCOV - code coverage report
Current view: top level - monetdb5/optimizer - opt_candidates.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 57 57 100.0 %
Date: 2025-03-24 23:16:36 Functions: 1 1 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, 2025 MonetDB Foundation;
       9             :  * Copyright August 2008 - 2023 MonetDB B.V.;
      10             :  * Copyright 1997 - July 2008 CWI.
      11             :  */
      12             : 
      13             : /*
      14             :  * Mark the production and use of candidate lists.
      15             :  */
      16             : 
      17             : #include "monetdb_config.h"
      18             : #include "mal_instruction.h"
      19             : #include "opt_candidates.h"
      20             : 
      21             : str
      22      506878 : OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
      23             : {
      24      506878 :         InstrPtr p;
      25      506878 :         str msg = MAL_SUCCEED;
      26             : 
      27      506878 :         if (!(ATOMIC_GET(&GDKdebug) & TESTINGMASK))
      28        2032 :                 goto wrapup;
      29             :         (void) cntxt;
      30             :         (void) stk;                                     /* to fool compilers */
      31    30776743 :         for (int i = 0; i < mb->stop; i++) {
      32    30271897 :                 p = getInstrPtr(mb, i);
      33    30271897 :                 if (p->token == ASSIGNsymbol) {
      34      148269 :                         for (int j = 0; j < p->retc && j + p->retc < p->argc; j++)
      35        9547 :                                 if (isVarCList(mb, getArg(p, p->retc + j)))
      36          48 :                                         setVarCList(mb, getArg(p, j));
      37             :                 }
      38    30271897 :                 if (getModuleId(p) == sqlRef) {
      39     3427799 :                         if (getFunctionId(p) == tidRef)
      40      308013 :                                 setVarCList(mb, getArg(p, 0));
      41     3119786 :                         else if (getFunctionId(p) == subdeltaRef)
      42       84943 :                                 setVarCList(mb, getArg(p, 0));
      43    26844098 :                 } else if (getModuleId(p) == algebraRef) {
      44     4214150 :                         if (getFunctionId(p) == selectRef
      45     4076260 :                                 || getFunctionId(p) == thetaselectRef)
      46      649691 :                                 setVarCList(mb, getArg(p, 0));
      47     3564459 :                         else if (getFunctionId(p) == likeselectRef)
      48        6799 :                                 setVarCList(mb, getArg(p, 0));
      49     3557660 :                         else if (getFunctionId(p) == intersectRef
      50     3548004 :                                          || getFunctionId(p) == differenceRef)
      51      170168 :                                 setVarCList(mb, getArg(p, 0));
      52     3387492 :                         else if (getFunctionId(p) == uniqueRef)
      53          74 :                                 setVarCList(mb, getArg(p, 0));
      54     3387418 :                         else if (getFunctionId(p) == firstnRef)
      55        1649 :                                 setVarCList(mb, getArg(p, 0));
      56     3385769 :                         else if (getFunctionId(p) == subsliceRef)
      57        1298 :                                 setVarCList(mb, getArg(p, 0));
      58     3384471 :                         else if (getFunctionId(p) == projectionRef
      59     1959892 :                                          && isVarCList(mb, getArg(p, p->retc + 0))
      60     1151048 :                                          && isVarCList(mb, getArg(p, p->retc + 1)))
      61      225495 :                                 setVarCList(mb, getArg(p, 0));
      62    22629948 :                 } else if (getModuleId(p) == generatorRef) {
      63         475 :                         if (getFunctionId(p) == selectRef
      64         475 :                                 || getFunctionId(p) == thetaselectRef)
      65          29 :                                 setVarCList(mb, getArg(p, 0));
      66    22629473 :                 } else if (getModuleId(p) == sampleRef) {
      67          21 :                         if (getFunctionId(p) == subuniformRef)
      68          21 :                                 setVarCList(mb, getArg(p, 0));
      69    22629452 :                 } else if (getModuleId(p) == groupRef && p->retc > 1) {
      70       90258 :                         if (getFunctionId(p) == subgroupRef
      71       84834 :                                 || getFunctionId(p) == subgroupdoneRef
      72       63653 :                                 || getFunctionId(p) == groupRef
      73       42648 :                                 || getFunctionId(p) == groupdoneRef)
      74       90258 :                                 setVarCList(mb, getArg(p, 1));
      75    22539194 :                 } else if (getModuleId(p) == batRef) {
      76      911542 :                         if (getFunctionId(p) == mergecandRef
      77      797978 :                                 || getFunctionId(p) == intersectcandRef
      78      797978 :                                 || getFunctionId(p) == diffcandRef
      79      797978 :                                 || getFunctionId(p) == mirrorRef)
      80      234344 :                                 setVarCList(mb, getArg(p, 0));
      81             :                 }
      82             :         }
      83             : 
      84             :         /* Defense line against incorrect plans */
      85             :         /* plan remains unaffected */
      86             :         // msg = chkTypes(cntxt->usermodule, mb, FALSE);
      87             :         // if( ms== MAL_SUCCEED)
      88             :         //      msg = chkFlow(mb);
      89             :         // if( ms== MAL_SUCCEED)
      90             :         //      msg = chkDeclarations(mb);
      91             :         /* keep actions taken as a fake argument */
      92      504846 : wrapup:
      93      506878 :         (void) pushInt(mb, pci, 1);
      94      506885 :         return msg;
      95             : }

Generated by: LCOV version 1.14