LCOV - code coverage report
Current view: top level - clients/odbc/driver - SQLGetFunctions.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 9 172 5.2 %
Date: 2021-10-13 02:24:04 Functions: 0 1 0.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             : /*
      10             :  * This code was created by Peter Harvey (mostly during Christmas 98/99).
      11             :  * This code is LGPL. Please ensure that this message remains in future
      12             :  * distributions and uses of this code (thats about all I get out of it).
      13             :  * - Peter Harvey pharvey@codebydesign.com
      14             :  *
      15             :  * This file has been modified for the MonetDB project.  See the file
      16             :  * Copyright in this directory for more information.
      17             :  */
      18             : 
      19             : /**********************************************************************
      20             :  * SQLGetFunctions()
      21             :  * CLI Compliance: ISO 92
      22             :  *
      23             :  * Author: Sjoerd Mullender
      24             :  * Date  : 4 sep 2003
      25             :  *
      26             :  **********************************************************************/
      27             : 
      28             : #include "ODBCGlobal.h"
      29             : #include "ODBCStmt.h"
      30             : 
      31             : 
      32             : /* this table contains all functions for which SQLGetFunctions should
      33             :    return SQL_TRUE */
      34             : static UWORD FuncImplemented[] = {
      35             :         SQL_API_SQLALLOCCONNECT,
      36             :         SQL_API_SQLALLOCENV,
      37             : #ifdef SQL_API_SQLALLOCHANDLE
      38             :         SQL_API_SQLALLOCHANDLE,
      39             : #endif
      40             :         SQL_API_SQLALLOCSTMT,
      41             :         SQL_API_SQLBINDCOL,
      42             :         SQL_API_SQLBINDPARAMETER,
      43             :         SQL_API_SQLBROWSECONNECT,
      44             :         SQL_API_SQLCANCEL,
      45             : #ifdef SQL_API_SQLCLOSECURSOR
      46             :         SQL_API_SQLCLOSECURSOR,
      47             : #endif
      48             : #ifdef SQL_API_SQLCOLATTRIBUTE
      49             :         SQL_API_SQLCOLATTRIBUTE,        /* == SQL_API_SQLCOLATTRIBUTES */
      50             : #endif
      51             :         SQL_API_SQLCOLATTRIBUTES,
      52             :         SQL_API_SQLCOLUMNPRIVILEGES,
      53             :         SQL_API_SQLCOLUMNS,
      54             :         SQL_API_SQLCONNECT,
      55             : #ifdef SQL_API_SQLCOPYDESC
      56             :         SQL_API_SQLCOPYDESC,
      57             : #endif
      58             :         SQL_API_SQLDESCRIBECOL,
      59             :         SQL_API_SQLDESCRIBEPARAM,
      60             :         SQL_API_SQLDISCONNECT,
      61             :         SQL_API_SQLDRIVERCONNECT,
      62             : #ifdef SQL_API_SQLENDTRAN
      63             :         SQL_API_SQLENDTRAN,
      64             : #endif
      65             :         SQL_API_SQLERROR,
      66             :         SQL_API_SQLEXECDIRECT,
      67             :         SQL_API_SQLEXECUTE,
      68             :         SQL_API_SQLEXTENDEDFETCH,
      69             :         SQL_API_SQLFETCH,
      70             : #ifdef SQL_API_SQLFETCHSCROLL
      71             :         SQL_API_SQLFETCHSCROLL,
      72             : #endif
      73             :         SQL_API_SQLFOREIGNKEYS,
      74             :         SQL_API_SQLFREECONNECT,
      75             :         SQL_API_SQLFREEENV,
      76             : #ifdef SQL_API_SQLFREEHANDLE
      77             :         SQL_API_SQLFREEHANDLE,
      78             : #endif
      79             :         SQL_API_SQLFREESTMT,
      80             : #ifdef SQL_API_SQLGETCONNECTATTR
      81             :         SQL_API_SQLGETCONNECTATTR,
      82             : #endif
      83             :         SQL_API_SQLGETCONNECTOPTION,
      84             :         SQL_API_SQLGETDATA,
      85             : #ifdef SQL_API_SQLGETDESCFIELD
      86             :         SQL_API_SQLGETDESCFIELD,
      87             : #endif
      88             : #ifdef SQL_API_SQLGETDESCREC
      89             :         SQL_API_SQLGETDESCREC,
      90             : #endif
      91             : #ifdef SQL_API_SQLGETDIAGREC
      92             :         SQL_API_SQLGETDIAGREC,
      93             : #endif
      94             : #ifdef SQL_API_SQLGETENVATTR
      95             :         SQL_API_SQLGETENVATTR,
      96             : #endif
      97             :         SQL_API_SQLGETFUNCTIONS,
      98             :         SQL_API_SQLGETINFO,
      99             : #ifdef SQL_API_SQLGETSTMTATTR
     100             :         SQL_API_SQLGETSTMTATTR,
     101             : #endif
     102             :         SQL_API_SQLGETSTMTOPTION,
     103             :         SQL_API_SQLGETTYPEINFO,
     104             :         SQL_API_SQLMORERESULTS,
     105             :         SQL_API_SQLNATIVESQL,
     106             :         SQL_API_SQLNUMPARAMS,
     107             :         SQL_API_SQLNUMRESULTCOLS,
     108             :         SQL_API_SQLPARAMOPTIONS,
     109             :         SQL_API_SQLPREPARE,
     110             :         SQL_API_SQLPRIMARYKEYS,
     111             :         SQL_API_SQLPROCEDURECOLUMNS,
     112             :         SQL_API_SQLPROCEDURES,
     113             :         SQL_API_SQLROWCOUNT,
     114             : #ifdef SQL_API_SQLSETCONNECTATTR
     115             :         SQL_API_SQLSETCONNECTATTR,
     116             : #endif
     117             :         SQL_API_SQLSETCONNECTOPTION,
     118             : #ifdef SQL_API_SQLSETDESCFIELD
     119             :         SQL_API_SQLSETDESCFIELD,
     120             : #endif
     121             : #ifdef SQL_API_SQLSETDESCREC
     122             :         SQL_API_SQLSETDESCREC,
     123             : #endif
     124             : #ifdef SQL_API_SQLSETENVATTR
     125             :         SQL_API_SQLSETENVATTR,
     126             : #endif
     127             :         SQL_API_SQLSETPARAM,
     128             :         SQL_API_SQLSETPOS,
     129             : #ifdef SQL_API_SQLSETSTMTATTR
     130             :         SQL_API_SQLSETSTMTATTR,
     131             : #endif
     132             :         SQL_API_SQLSETSTMTOPTION,
     133             :         SQL_API_SQLSPECIALCOLUMNS,
     134             :         SQL_API_SQLSTATISTICS,
     135             :         SQL_API_SQLTABLEPRIVILEGES,
     136             :         SQL_API_SQLTABLES,
     137             :         SQL_API_SQLTRANSACT,
     138             : #if 0
     139             : /* not yet implemented */
     140             : #ifdef SQL_API_SQLALLOCHANDLESTD
     141             :         SQL_API_SQLALLOCHANDLESTD,
     142             : #endif
     143             : #ifdef SQL_API_SQLBINDPARAM
     144             :         SQL_API_SQLBINDPARAM,
     145             : #endif
     146             : #ifdef SQL_API_SQLBULKOPERATIONS
     147             :         SQL_API_SQLBULKOPERATIONS,
     148             : #endif
     149             :         SQL_API_SQLDATASOURCES,
     150             :         SQL_API_SQLDRIVERS,
     151             :         SQL_API_SQLGETCURSORNAME,
     152             : #ifdef SQL_API_SQLGETDIAGFIELD
     153             :         SQL_API_SQLGETDIAGFIELD,
     154             : #endif
     155             :         SQL_API_SQLPARAMDATA,
     156             :         SQL_API_SQLPUTDATA,
     157             :         SQL_API_SQLSETCURSORNAME,
     158             :         SQL_API_SQLSETSCROLLOPTIONS,
     159             : #endif /* not yet implemented */
     160             : };
     161             : 
     162             : #define NFUNCIMPLEMENTED (sizeof(FuncImplemented)/sizeof(FuncImplemented[0]))
     163             : 
     164             : /* this table is a bit map compatible with
     165             :    SQL_API_ODBC3_ALL_FUNCTIONS, to be initialized from the table
     166             :    above */
     167             : static UWORD FuncExistMap[SQL_API_ODBC3_ALL_FUNCTIONS_SIZE];
     168             : 
     169             : #ifdef ODBCDEBUG
     170             : static char *
     171           0 : translateFunctionId(SQLUSMALLINT FunctionId)
     172             : {
     173           0 :         switch (FunctionId) {
     174             :         case SQL_API_ODBC3_ALL_FUNCTIONS:
     175             :                 return "SQL_API_ODBC3_ALL_FUNCTIONS";
     176           0 :         case SQL_API_SQLALLOCCONNECT:
     177           0 :                 return "SQL_API_SQLALLOCCONNECT";
     178           0 :         case SQL_API_SQLALLOCENV:
     179           0 :                 return "SQL_API_SQLALLOCENV";
     180             : #ifdef SQL_API_SQLALLOCHANDLE
     181           0 :         case SQL_API_SQLALLOCHANDLE:
     182           0 :                 return "SQL_API_SQLALLOCHANDLE";
     183             : #endif
     184           0 :         case SQL_API_SQLALLOCSTMT:
     185           0 :                 return "SQL_API_SQLALLOCSTMT";
     186           0 :         case SQL_API_SQLBINDCOL:
     187           0 :                 return "SQL_API_SQLBINDCOL";
     188           0 :         case SQL_API_SQLBINDPARAMETER:
     189           0 :                 return "SQL_API_SQLBINDPARAMETER";
     190           0 :         case SQL_API_SQLBROWSECONNECT:
     191           0 :                 return "SQL_API_SQLBROWSECONNECT";
     192           0 :         case SQL_API_SQLCANCEL:
     193           0 :                 return "SQL_API_SQLCANCEL";
     194             : #ifdef SQL_API_SQLCLOSECURSOR
     195           0 :         case SQL_API_SQLCLOSECURSOR:
     196           0 :                 return "SQL_API_SQLCLOSECURSOR";
     197             : #endif
     198             : #ifdef SQL_API_SQLCOLATTRIBUTE
     199           0 :         case SQL_API_SQLCOLATTRIBUTE:
     200           0 :                 return "SQL_API_SQLCOLATTRIBUTE";
     201             : #endif
     202           0 :         case SQL_API_SQLCOLUMNPRIVILEGES:
     203           0 :                 return "SQL_API_SQLCOLUMNPRIVILEGES";
     204           0 :         case SQL_API_SQLCOLUMNS:
     205           0 :                 return "SQL_API_SQLCOLUMNS";
     206           0 :         case SQL_API_SQLCONNECT:
     207           0 :                 return "SQL_API_SQLCONNECT";
     208             : #ifdef SQL_API_SQLCOPYDESC
     209           0 :         case SQL_API_SQLCOPYDESC:
     210           0 :                 return "SQL_API_SQLCOPYDESC";
     211             : #endif
     212           0 :         case SQL_API_SQLDESCRIBECOL:
     213           0 :                 return "SQL_API_SQLDESCRIBECOL";
     214           0 :         case SQL_API_SQLDESCRIBEPARAM:
     215           0 :                 return "SQL_API_SQLDESCRIBEPARAM";
     216           0 :         case SQL_API_SQLDISCONNECT:
     217           0 :                 return "SQL_API_SQLDISCONNECT";
     218           0 :         case SQL_API_SQLDRIVERCONNECT:
     219           0 :                 return "SQL_API_SQLDRIVERCONNECT";
     220             : #ifdef SQL_API_SQLENDTRAN
     221           0 :         case SQL_API_SQLENDTRAN:
     222           0 :                 return "SQL_API_SQLENDTRAN";
     223             : #endif
     224           0 :         case SQL_API_SQLERROR:
     225           0 :                 return "SQL_API_SQLERROR";
     226           0 :         case SQL_API_SQLEXECDIRECT:
     227           0 :                 return "SQL_API_SQLEXECDIRECT";
     228           0 :         case SQL_API_SQLEXECUTE:
     229           0 :                 return "SQL_API_SQLEXECUTE";
     230           0 :         case SQL_API_SQLEXTENDEDFETCH:
     231           0 :                 return "SQL_API_SQLEXTENDEDFETCH";
     232           0 :         case SQL_API_SQLFETCH:
     233           0 :                 return "SQL_API_SQLFETCH";
     234             : #ifdef SQL_API_SQLFETCHSCROLL
     235           0 :         case SQL_API_SQLFETCHSCROLL:
     236           0 :                 return "SQL_API_SQLFETCHSCROLL";
     237             : #endif
     238           0 :         case SQL_API_SQLFOREIGNKEYS:
     239           0 :                 return "SQL_API_SQLFOREIGNKEYS";
     240           0 :         case SQL_API_SQLFREECONNECT:
     241           0 :                 return "SQL_API_SQLFREECONNECT";
     242           0 :         case SQL_API_SQLFREEENV:
     243           0 :                 return "SQL_API_SQLFREEENV";
     244             : #ifdef SQL_API_SQLFREEHANDLE
     245           0 :         case SQL_API_SQLFREEHANDLE:
     246           0 :                 return "SQL_API_SQLFREEHANDLE";
     247             : #endif
     248           0 :         case SQL_API_SQLFREESTMT:
     249           0 :                 return "SQL_API_SQLFREESTMT";
     250             : #ifdef SQL_API_SQLGETCONNECTATTR
     251           0 :         case SQL_API_SQLGETCONNECTATTR:
     252           0 :                 return "SQL_API_SQLGETCONNECTATTR";
     253             : #endif
     254           0 :         case SQL_API_SQLGETCONNECTOPTION:
     255           0 :                 return "SQL_API_SQLGETCONNECTOPTION";
     256           0 :         case SQL_API_SQLGETDATA:
     257           0 :                 return "SQL_API_SQLGETDATA";
     258             : #ifdef SQL_API_SQLGETDESCFIELD
     259           0 :         case SQL_API_SQLGETDESCFIELD:
     260           0 :                 return "SQL_API_SQLGETDESCFIELD";
     261             : #endif
     262             : #ifdef SQL_API_SQLGETDESCREC
     263           0 :         case SQL_API_SQLGETDESCREC:
     264           0 :                 return "SQL_API_SQLGETDESCREC";
     265             : #endif
     266             : #ifdef SQL_API_SQLGETDIAGREC
     267           0 :         case SQL_API_SQLGETDIAGREC:
     268           0 :                 return "SQL_API_SQLGETDIAGREC";
     269             : #endif
     270             : #ifdef SQL_API_SQLGETENVATTR
     271           0 :         case SQL_API_SQLGETENVATTR:
     272           0 :                 return "SQL_API_SQLGETENVATTR";
     273             : #endif
     274           0 :         case SQL_API_SQLGETFUNCTIONS:
     275           0 :                 return "SQL_API_SQLGETFUNCTIONS";
     276           0 :         case SQL_API_SQLGETINFO:
     277           0 :                 return "SQL_API_SQLGETINFO";
     278             : #ifdef SQL_API_SQLGETSTMTATTR
     279           0 :         case SQL_API_SQLGETSTMTATTR:
     280           0 :                 return "SQL_API_SQLGETSTMTATTR";
     281             : #endif
     282           0 :         case SQL_API_SQLGETSTMTOPTION:
     283           0 :                 return "SQL_API_SQLGETSTMTOPTION";
     284           0 :         case SQL_API_SQLGETTYPEINFO:
     285           0 :                 return "SQL_API_SQLGETTYPEINFO";
     286           0 :         case SQL_API_SQLMORERESULTS:
     287           0 :                 return "SQL_API_SQLMORERESULTS";
     288           0 :         case SQL_API_SQLNATIVESQL:
     289           0 :                 return "SQL_API_SQLNATIVESQL";
     290           0 :         case SQL_API_SQLNUMPARAMS:
     291           0 :                 return "SQL_API_SQLNUMPARAMS";
     292           0 :         case SQL_API_SQLNUMRESULTCOLS:
     293           0 :                 return "SQL_API_SQLNUMRESULTCOLS";
     294           0 :         case SQL_API_SQLPARAMOPTIONS:
     295           0 :                 return "SQL_API_SQLPARAMOPTIONS";
     296           0 :         case SQL_API_SQLPREPARE:
     297           0 :                 return "SQL_API_SQLPREPARE";
     298           0 :         case SQL_API_SQLPRIMARYKEYS:
     299           0 :                 return "SQL_API_SQLPRIMARYKEYS";
     300           0 :         case SQL_API_SQLPROCEDURES:
     301           0 :                 return "SQL_API_SQLPROCEDURES";
     302           0 :         case SQL_API_SQLROWCOUNT:
     303           0 :                 return "SQL_API_SQLROWCOUNT";
     304             : #ifdef SQL_API_SQLSETCONNECTATTR
     305           0 :         case SQL_API_SQLSETCONNECTATTR:
     306           0 :                 return "SQL_API_SQLSETCONNECTATTR";
     307             : #endif
     308           0 :         case SQL_API_SQLSETCONNECTOPTION:
     309           0 :                 return "SQL_API_SQLSETCONNECTOPTION";
     310             : #ifdef SQL_API_SQLSETDESCFIELD
     311           0 :         case SQL_API_SQLSETDESCFIELD:
     312           0 :                 return "SQL_API_SQLSETDESCFIELD";
     313             : #endif
     314             : #ifdef SQL_API_SQLSETDESCREC
     315           0 :         case SQL_API_SQLSETDESCREC:
     316           0 :                 return "SQL_API_SQLSETDESCREC";
     317             : #endif
     318             : #ifdef SQL_API_SQLSETENVATTR
     319           0 :         case SQL_API_SQLSETENVATTR:
     320           0 :                 return "SQL_API_SQLSETENVATTR";
     321             : #endif
     322           0 :         case SQL_API_SQLSETPARAM:
     323           0 :                 return "SQL_API_SQLSETPARAM";
     324           0 :         case SQL_API_SQLSETPOS:
     325           0 :                 return "SQL_API_SQLSETPOS";
     326             : #ifdef SQL_API_SQLSETSTMTATTR
     327           0 :         case SQL_API_SQLSETSTMTATTR:
     328           0 :                 return "SQL_API_SQLSETSTMTATTR";
     329             : #endif
     330           0 :         case SQL_API_SQLSETSTMTOPTION:
     331           0 :                 return "SQL_API_SQLSETSTMTOPTION";
     332           0 :         case SQL_API_SQLSPECIALCOLUMNS:
     333           0 :                 return "SQL_API_SQLSPECIALCOLUMNS";
     334           0 :         case SQL_API_SQLSTATISTICS:
     335           0 :                 return "SQL_API_SQLSTATISTICS";
     336           0 :         case SQL_API_SQLTABLEPRIVILEGES:
     337           0 :                 return "SQL_API_SQLTABLEPRIVILEGES";
     338           0 :         case SQL_API_SQLTABLES:
     339           0 :                 return "SQL_API_SQLTABLES";
     340           0 :         case SQL_API_SQLTRANSACT:
     341           0 :                 return "SQL_API_SQLTRANSACT";
     342             : #ifdef SQL_API_SQLALLOCHANDLESTD
     343           0 :         case SQL_API_SQLALLOCHANDLESTD:
     344           0 :                 return "SQL_API_SQLALLOCHANDLESTD";
     345             : #endif
     346             : #ifdef SQL_API_SQLBINDPARAM
     347           0 :         case SQL_API_SQLBINDPARAM:
     348           0 :                 return "SQL_API_SQLBINDPARAM";
     349             : #endif
     350             : #ifdef SQL_API_SQLBULKOPERATIONS
     351           0 :         case SQL_API_SQLBULKOPERATIONS:
     352           0 :                 return "SQL_API_SQLBULKOPERATIONS";
     353             : #endif
     354           0 :         case SQL_API_SQLDATASOURCES:
     355           0 :                 return "SQL_API_SQLDATASOURCES";
     356           0 :         case SQL_API_SQLDRIVERS:
     357           0 :                 return "SQL_API_SQLDRIVERS";
     358           0 :         case SQL_API_SQLGETCURSORNAME:
     359           0 :                 return "SQL_API_SQLGETCURSORNAME";
     360             : #ifdef SQL_API_SQLGETDIAGFIELD
     361           0 :         case SQL_API_SQLGETDIAGFIELD:
     362           0 :                 return "SQL_API_SQLGETDIAGFIELD";
     363             : #endif
     364           0 :         case SQL_API_SQLPARAMDATA:
     365           0 :                 return "SQL_API_SQLPARAMDATA";
     366           0 :         case SQL_API_SQLPROCEDURECOLUMNS:
     367           0 :                 return "SQL_API_SQLPROCEDURECOLUMNS";
     368           0 :         case SQL_API_SQLPUTDATA:
     369           0 :                 return "SQL_API_SQLPUTDATA";
     370           0 :         case SQL_API_SQLSETCURSORNAME:
     371           0 :                 return "SQL_API_SQLSETCURSORNAME";
     372           0 :         case SQL_API_SQLSETSCROLLOPTIONS:
     373           0 :                 return "SQL_API_SQLSETSCROLLOPTIONS";
     374           0 :         default:
     375           0 :                 return "unknown";
     376             :         }
     377             : }
     378             : #endif
     379             : 
     380             : SQLRETURN SQL_API
     381             : SQLGetFunctions(SQLHDBC ConnectionHandle,
     382             :                 SQLUSMALLINT FunctionId,
     383             :                 SQLUSMALLINT *SupportedPtr)
     384             : {
     385             :         ODBCDbc *dbc = (ODBCDbc *) ConnectionHandle;
     386             : 
     387             : #ifdef ODBCDEBUG
     388           2 :         ODBCLOG("SQLGetFunctions %p %s\n",
     389             :                 ConnectionHandle, translateFunctionId(FunctionId));
     390             : #endif
     391             : 
     392           2 :         if (!isValidDbc(dbc))
     393             :                 return SQL_INVALID_HANDLE;
     394             : 
     395           2 :         clearDbcErrors(dbc);
     396             : 
     397           2 :         if (!SQL_FUNC_EXISTS(FuncExistMap, FuncImplemented[0])) {
     398             :                 /* not yet initialized, so do it now */
     399             :                 UWORD *p;
     400             : 
     401         136 :                 for (p = FuncImplemented; p < &FuncImplemented[NFUNCIMPLEMENTED]; p++)
     402         134 :                         FuncExistMap[*p >> 4] |= (UWORD) 1 << (*p & 0xF);
     403             :         }
     404             : 
     405           2 :         if (FunctionId == SQL_API_ODBC3_ALL_FUNCTIONS) {
     406           2 :                 memcpy(SupportedPtr, FuncExistMap,
     407             :                        SQL_API_ODBC3_ALL_FUNCTIONS_SIZE * sizeof(FuncExistMap[0]));
     408           2 :                 return SQL_SUCCESS;
     409             :         }
     410             : 
     411           0 :         if (FunctionId < SQL_API_ODBC3_ALL_FUNCTIONS_SIZE * 16) {
     412           0 :                 *SupportedPtr = SQL_FUNC_EXISTS(FuncExistMap, FunctionId);
     413           0 :                 return SQL_SUCCESS;
     414             :         }
     415             : 
     416             :         /* Function type out of range */
     417           0 :         addDbcError(dbc, "HY095", NULL, 0);
     418           0 :         return SQL_ERROR;
     419             : }

Generated by: LCOV version 1.14