Skip to content

Commit

Permalink
Merge pull request #1239 from dronord/ora_integer
Browse files Browse the repository at this point in the history
Oracle NUMBER not NUM in application
  • Loading branch information
bogdan-iancu committed May 28, 2019
2 parents 236d466 + d2542c0 commit a6c9376
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 18 deletions.
2 changes: 1 addition & 1 deletion modules/db_oracle/db_oracle.c
Expand Up @@ -69,7 +69,7 @@ struct module_exports exports = {
0, /* exported statistics */
0, /* exported MI functions */
0, /* exported pseudo-variables */
0, /* exported transformations */
0, /* exported transformations */
0, /* extra processes */
oracle_mod_init, /* module initialization function */
0, /* response function*/
Expand Down
36 changes: 20 additions & 16 deletions modules/db_oracle/res.c
Expand Up @@ -128,48 +128,52 @@ static int get_columns(ora_con_t* con, db_res_t* _r, OCIStmt* _c, dmap_t* _d)
LM_DBG("use DB_BITMAP type\n");
RES_TYPES(_r)[i] = DB_BITMAP;
len = sizeof(VAL_BITMAP((db_val_t*)NULL));
dtype = SQLT_UIN;
break;

case SQLT_INT: /* (ORANET TYPE) integer */
set_int:
LM_DBG("use DB_INT result type\n");
RES_TYPES(_r)[i] = DB_INT;
len = sizeof(VAL_INT((db_val_t*)NULL));
dtype = SQLT_INT;
break;

case SQLT_LNG: /* long */
case SQLT_VNU: /* NUM with preceding length byte */
case SQLT_NUM: /* (ORANET TYPE) oracle numeric */
case SQLT_NUM: /* (ORANET TYPE) oracle numeric */ {
sb1 sc;
status = OCIAttrGet(param, OCI_DTYPE_PARAM,
(dvoid**)(dvoid*)&sc, NULL,
OCI_ATTR_SCALE, con->errhp);
if (status != OCI_SUCCESS) goto ora_err;
if (sc) goto set_flt;

len = 0; /* PRECISION is ub1 */
status = OCIAttrGet(param, OCI_DTYPE_PARAM,
(dvoid**)(dvoid*)&len, NULL, OCI_ATTR_PRECISION,
con->errhp);
if (status != OCI_SUCCESS) goto ora_err;
if (len <= 11) {
sb1 sc;
status = OCIAttrGet(param, OCI_DTYPE_PARAM,
(dvoid**)(dvoid*)&sc, NULL,
OCI_ATTR_SCALE, con->errhp);
if (status != OCI_SUCCESS) goto ora_err;
if (!sc) {
dtype = SQLT_INT;
if (len != 11) goto set_int;
dtype = SQLT_UIN;
goto set_bitmap;
}
}

if (len < 11)
goto set_int;
else if (len == 11)
goto set_bitmap;

/* len > 11 */
LM_DBG("use DB_BIGINT result type\n");
RES_TYPES(_r)[i] = DB_BIGINT;
len = sizeof(VAL_BIGINT((db_val_t*)NULL));
dtype = SQLT_NUM;
dtype = SQLT_INT;
break;

}
case SQLT_FLT: /* (ORANET TYPE) Floating point number */
case SQLT_BFLOAT: /* Native Binary float*/
case SQLT_BDOUBLE: /* NAtive binary double */
case SQLT_IBFLOAT: /* binary float canonical */
case SQLT_IBDOUBLE: /* binary double canonical */
case SQLT_PDN: /* (ORANET TYPE) Packed Decimal Numeric */
set_flt:
LM_DBG("use DB_DOUBLE result type\n");
RES_TYPES(_r)[i] = DB_DOUBLE;
len = sizeof(VAL_DOUBLE((db_val_t*)NULL));
Expand Down
2 changes: 1 addition & 1 deletion modules/db_oracle/val.c
Expand Up @@ -98,7 +98,7 @@ int db_oracle_val2bind(bmap_t* _m, const db_val_t* _v, OCIDate* _o)
case DB_BIGINT:
_m->addr = (int*)&VAL_BIGINT(_v);
_m->size = sizeof(VAL_BIGINT(_v));
_m->type = SQLT_NUM;
_m->type = SQLT_INT;
break;

case DB_BITMAP:
Expand Down

0 comments on commit a6c9376

Please sign in to comment.