src/evsql/query.c
branchnew-evsql
changeset 48 8b019d191353
parent 45 424ce5ab82fd
equal deleted inserted replaced
47:8c6c459eacb7 48:8b019d191353
    82     // initialize params
    82     // initialize params
    83     _evsql_query_params_init_pq(&query->params, count, params->result_format);
    83     _evsql_query_params_init_pq(&query->params, count, params->result_format);
    84 
    84 
    85     // transform
    85     // transform
    86     for (param = params->list, idx = 0; param->info.type; param++, idx++) {
    86     for (param = params->list, idx = 0; param->info.type; param++, idx++) {
    87         // `set for NULLs, otherwise not
    87         // set for NULLs, otherwise not
    88         query->params.types[idx] = param->bytes ? 0 : EVSQL_PQ_ARBITRARY_TYPE_OID;
    88         query->params.types[idx] = (param->bytes || param->flags.has_value) ? 0 : EVSQL_PQ_ARBITRARY_TYPE_OID;
    89 
    89 
    90         // scalar values
    90         // scalar values
    91         query->params.item_vals[idx] = param->value;
    91         query->params.item_vals[idx] = param->value;
    92         
    92         
    93         // values
    93         // values
    94         // point this at the value stored in the item_vals union if flagged as such
    94         // point this at the value stored in the item_vals union if flagged as such
    95         query->params.values[idx] = param->flags.has_value ? (const char *) &query->params.item_vals[idx] : param->bytes;
    95         query->params.values[idx] = param->flags.has_value ? (const char *) &query->params.item_vals[idx] : param->bytes;
    96 
    96 
    97         // lengths
    97         // lengths
    98         query->params.lengths[idx] = param->length;
    98         query->params.lengths[idx] = param->length;
    99 
    99         
   100         // formats, binary if length is nonzero, but text for NULLs
   100         // XXX: this assumes that format is FMT_BINARY...
   101         query->params.formats[idx] = param->length && param->bytes ? 1 : 0;
   101         query->params.formats[idx] = param->info.format;
   102     }
   102     }
   103 
   103 
   104     // execute it
   104     // execute it
   105     if (_evsql_query_enqueue(evsql, trans, query, command))
   105     if (_evsql_query_enqueue(evsql, trans, query, command))
   106         goto error;
   106         goto error;