The C++ SQL Parameter Substitution Format Specifiers

When executing the McoSqlEngine methods executeStatement(), executeQuery() or prepare(), or the C API equivalents, the format specifiers for substituting variable values into the SQL string are defined in the sections below. The parameter substitution occurs wherever a per cent sign is followed by a specifier ("%<specifier>") in the SQL string argument.

executeStatement() and executeQuery()

The following table lists the allowable format specifiers for SQL statement arguments to the C++ McoSqlEngine methods executeStatement()and executeQuery(), or the C API equivalents mcosql_execute_statement() or mcosql_execute_query():

Specifier C++ Type Meaning
b bool Boolean value
i int Signed 32-bit integer
u unsigned int Unsigned 32-bit integer
l int64_t Signed 64-bit integer
p ref eXtremeDB reference
f double Double precision 64-bit floating point value
t time_t Date/Time
w wchar_t Wide character string
s char * Multibyte character string
r - Pointer to a structure
R - Pointer to a fixed structure
* - Indirect qualifier: used in conjunction with another type specifier to represent a pointer to a value of the specified type
v Value Arbitrary value
0-9 - The element that corresponds to this index in the parameters array

Examples

1. Map all fields of the variable c of type struct _Contribution to the fields of table Contribution:

 
    struct _Contribution
    {
        char const * name;
        uint4        date_val;
        uint4        amount;
    } c;
    ...
    executeStatement("insert into Contributions %r", c);
     

2. Map variable age (int), weight (double) and name (char*) to the corresponding columns of the Person table:

 
    executeStatement("update Person set age=%i, weight=%f where name=%s", age, weight, name);
 

3) Map variable cutoff_date (date) to the where clause of a query select statement:

 
    executeQuery("select * from Person where date_of_birth > %t", cuttoff_date);.
     

4) Using the C API, map variables salary (unsigned int), rating (double) and name (char*) to an update statement:

 
    mcosql_execute_statement(sql_db, NULL, &rc, 
        "update Person set salary=%u, rating=%f where name=%s",
        salary, rating, name );
         

 

prepare()

For prepared statements the allowable format specifiers are slightly different than those listed above. The following table lists the allowable format specifiers for SQL statement arguments to the C++ McoSqlEngine method prepare() or the C API equivalent mcosql_prepare_statement():

Specifier C++ Type Meaning
b bool Boolean value
h int2 Integer
i<N> int Signed integer with width=N: 1, 2, 4 or 8
u<N> unsigned int Unsigned integer with width=N: 1, 2, 4 or 8
l int64_t Signed 64-bit integer
p ref eXtremeDB reference
f double Double precision 64-bit floating point value
t time_t Date/Time
w wchar_t Wide character string
s char ** Pointer to a char pointer
S char * Pointer to a char array
r - Struct mapped to the record (record fields with string type should have type char*)
R - Struct mapped to the record (record fields with char<N> type should have type char[N])
*b bool * Pointer to a bool
*h int2* Signed int* with width=2
*i<N> int * Signed int* with width=N: 1, 2, 4 or 8
*u<N> unsigned int * Unsigned int* with width=N: 1, 2, 4 or 8
*l int64_t * Signed 64-bit integer
*p ref * eXtremeDB reference
*f double* Pointer to a double precision 64-bit floating point value
*t time_t* Pointer to a Date/Time
*s char** Pointer to a char pointer
*w wchar_t** Pointer to a wide character string
*W char * Pointer to a fixed size unicode string
A<N,S> - Array: passed as a C-style array. Arguments: N=number of elements, S=size of elements
I<N> - Array of signed integers: N=number of elements
U<N> - Array of unsigned integers: N=number of elements
F<N> - Array of float or double depending on N which can be 4 (float) or 8 (double)
L - Integer value passed as a double
v - Pointer to a McoSql::Value
% - The percent symbol

Example

 
    PreparedStatement pStmt = PreparedStatement();
    char * name = “Michael”;
 
    engine.prepare(pStmt, "select * from Person where name like %s", name));
            
     
    QueryResult result( engine.executePreparedQuery(pStmt);