00001
00002
00003
00004
00005
00006
00007
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 # include "otl_utils.hpp"
00042
00043 BEGIN_XDFLENGINE_NS
00044
00045
00046
00047
00048 otl_stream* OTL_openDataStream(const char* p_pszSQLStatement, otl_connect* p_pConnection,unsigned int p_uiBufSize)
00049 {
00050 otl_stream* l_rsData=0;
00051
00052
00053 DEBUG_IN(OTL_openDataStream)
00054
00055 DEBUG_ECHO << "Opening data stream for :" << p_pszSQLStatement << "\n";
00056
00057
00058 l_rsData=new otl_stream();
00059
00060 l_rsData->set_flush( false);
00061 l_rsData->set_commit( false);
00062 l_rsData->set_all_column_types(otl_all_num2str | otl_all_date2str);
00063 try
00064 {
00065 l_rsData->open( p_uiBufSize, p_pszSQLStatement, (*p_pConnection));
00066 }
00067 catch(otl_exception& p)
00068 {
00069 DEBUG_OUT(OTL_openDataStream)
00070 OTL_releaseDataStream( l_rsData);
00071 throw p;
00072 }
00073
00074 DEBUG_OUT(OTL_openDataStream)
00075
00076 return l_rsData;
00077 }
00078
00079
00080
00081
00082 void OTL_releaseDataStream(otl_stream* p_pOTLStream)
00083 {
00084 DEBUG_IN(OTL_releaseDataStream)
00085
00086 if( p_pOTLStream)
00087 {
00088
00089 p_pOTLStream->close();
00090 delete p_pOTLStream;
00091 p_pOTLStream=0;
00092 }
00093
00094 DEBUG_OUT(OTL_releaseDataStream)
00095 }
00096
00097
00098
00099
00100 void OTL_insertInVar(otl_stream* p_pOTLStream, int p_intOTLType, const char* p_pszVarValue)
00101 {
00102 otl_null l_nullval;
00103 char * l_pszTmp=0;
00104
00105 DEBUG_IN(OTL_insertInVar)
00106
00107
00108 try
00109 {
00110 if( ! p_pszVarValue)
00111 {
00112 (*p_pOTLStream) << l_nullval;
00113 }
00114 else
00115 {
00116 if( strcmp( p_pszVarValue, REQ_NULL) == 0)
00117 {
00118 (*p_pOTLStream) << l_nullval;
00119 }
00120 else
00121 {
00122
00123
00124
00125 switch( p_intOTLType)
00126 {
00127 case otl_var_char:
00128
00129 (*p_pOTLStream) << (const char*) p_pszVarValue ;
00130 break;
00131 case otl_var_double:
00132 l_pszTmp = replaceInCharBuffer(p_pszVarValue,",",".");
00133
00134 (*p_pOTLStream) << (double) atof(l_pszTmp);
00135 break;
00136 case otl_var_float:
00137 l_pszTmp = replaceInCharBuffer(p_pszVarValue,",",".");
00138
00139 (*p_pOTLStream) << (double) atof(l_pszTmp);
00140 break;
00141 case otl_var_int:
00142
00143 (*p_pOTLStream) << (int) atoi(p_pszVarValue);
00144 break;
00145 case otl_var_unsigned_int:
00146
00147 (*p_pOTLStream) << (unsigned int)atoi(p_pszVarValue);
00148 break;
00149 case otl_var_short:
00150
00151 (*p_pOTLStream) << (short) atoi(p_pszVarValue);
00152 break;
00153 case otl_var_long_int:
00154
00155 (*p_pOTLStream) << (long) atol(p_pszVarValue);
00156 break;
00157 case otl_var_timestamp:
00158
00159 (*p_pOTLStream) << p_pszVarValue;
00160 break;
00161 case otl_var_varchar_long:
00162
00163 (*p_pOTLStream) << p_pszVarValue;
00164 break;
00165 case otl_var_raw_long:
00166 (*p_pOTLStream) << p_pszVarValue;
00167 break;
00168 case otl_var_clob:
00169 (*p_pOTLStream) << p_pszVarValue;
00170 break;
00171 case otl_var_blob:
00172 (*p_pOTLStream) << p_pszVarValue;
00173 break;
00174 }
00175 }
00176 }
00177
00178 }
00179 catch(otl_exception& p)
00180 {
00181 l_pszTmp = releaseCharBuffer(l_pszTmp);
00182 DEBUG_OUT(OTL_insertInVar)
00183 throw p;
00184 }
00185
00186
00187 l_pszTmp = releaseCharBuffer(l_pszTmp);
00188 DEBUG_OUT(OTL_insertInVar)
00189
00190 }
00191
00192
00193
00194
00195
00196
00197 char* OTL_getColumBindType(const char* p_pszFieldDBSpec, unsigned int p_uiSQLSyntax)
00198 {
00199
00200 int l_intOTLType;
00201 int l_intDBSize;
00202 char* l_pszDDL;
00203 char* l_pszTmp;
00204 char* l_pszOTLType;
00205 char* l_pszDBType;
00206 char* l_pszDBSize;
00207 char* l_pszFieldDBSpec;
00208 char* l_pszTmp2;
00209
00210
00211 DEBUG_IN(OTL_getColumBindType)
00212
00213
00214 l_pszFieldDBSpec = copyCharBuffer( p_pszFieldDBSpec);
00215 l_pszTmp = l_pszFieldDBSpec;
00216
00217
00218 l_pszTmp2 = strstr( l_pszTmp, DBOBJDEFFIELD_DBSPECSEP);
00219 if( l_pszTmp2 )
00220 {
00221 l_pszTmp2[0]='\0';
00222 l_pszOTLType = l_pszTmp;
00223 l_pszTmp = l_pszTmp2 + strlen(DDLSTREAMER_DBSPECSEP);
00224 }
00225 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_OTHERS + ERRCODE_CAUSE_WRONGDATA , "OTL type is missing in DBSpec field " , l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00226
00227
00228 l_pszTmp2 = strstr( l_pszTmp, DBOBJDEFFIELD_DBSPECSEP);
00229 if( l_pszTmp2 )
00230 {
00231 l_pszTmp2[0]='\0';
00232 l_pszDBType = l_pszTmp;
00233 l_pszTmp = l_pszTmp2 + strlen(DBOBJDEFFIELD_DBSPECSEP);
00234 }
00235 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_OTHERS + ERRCODE_CAUSE_WRONGDATA , "DB type is missing in DBSpec field " , l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00236
00237
00238 l_pszTmp2 = strstr( l_pszTmp, DBOBJDEFFIELD_DBSPECSEP);
00239 if( l_pszTmp2 )
00240 {
00241 l_pszTmp2[0]='\0';
00242 l_intDBSize = atoi(l_pszTmp)+1;
00243 l_pszDBSize = copyCharBuffer("000000000");
00244 sprintf(l_pszDBSize,"%d",l_intDBSize);
00245 l_pszTmp = l_pszTmp2 + strlen(DBOBJDEFFIELD_DBSPECSEP);
00246 }
00247 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_OTHERS + ERRCODE_CAUSE_WRONGDATA , "DB size is missing in DBSpec field ", l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00248
00249 l_intOTLType=atoi(l_pszOTLType);
00250
00251 switch( l_intOTLType)
00252 {
00253 case otl_var_char:
00254
00255 l_pszDDL = copyCharBuffer( "char[");
00256 l_pszDDL = concatCharBuffer( l_pszDDL, l_pszDBSize );
00257 l_pszDDL = concatCharBuffer( l_pszDDL, "]") ;
00258 break;
00259 case otl_var_double:
00260
00261 l_pszDDL = copyCharBuffer( "double" );
00262 break;
00263 case otl_var_float:
00264
00265 l_pszDDL = copyCharBuffer( "long" );
00266 break;
00267 case otl_var_int:
00268
00269 l_pszDDL= copyCharBuffer( "int" );
00270 break;
00271 case otl_var_unsigned_int:
00272
00273 l_pszDDL= copyCharBuffer( "unsigned" );
00274 break;
00275 case otl_var_short:
00276
00277 l_pszDDL= copyCharBuffer( "short" );
00278 break;
00279 case otl_var_long_int:
00280
00281 l_pszDDL= copyCharBuffer( "long" );
00282 break;
00283 case otl_var_timestamp:
00284
00285
00286
00287
00288 l_pszDDL= copyCharBuffer( "char[50]" );
00289
00290 break;
00291 case otl_var_varchar_long:
00292
00293 l_pszDDL= copyCharBuffer( "varchar_long" );
00294 break;
00295 case otl_var_raw_long:
00296
00297 l_pszDDL= copyCharBuffer( "raw_long" );
00298 break;
00299 case otl_var_clob:
00300
00301 l_pszDDL= copyCharBuffer( "clob" );
00302 break;
00303 case otl_var_blob:
00304
00305 l_pszDDL= copyCharBuffer( "blob" );
00306 break;
00307 }
00308
00309 l_pszFieldDBSpec = releaseCharBuffer( l_pszFieldDBSpec);
00310 l_pszDBSize = releaseCharBuffer( l_pszDBSize);
00311
00312
00313 DEBUG_OUT(OTL_getColumBindType)
00314
00315 return l_pszDDL;
00316 }
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326 char* OTL_getColumnDDL(const char* p_pszFieldDBSpec, unsigned int p_uiSQLSyntax)
00327 {
00328
00329 int l_intOTLType;
00330 char* l_pszDDL;
00331 const char* l_pszOTLType;
00332 const char* l_pszDBType;
00333 const char* l_pszDBSize;
00334 const char* l_pszDBScale;
00335 const char* l_pszDBPrec;
00336 const char* l_pszDBNullOK;
00337 char* l_pszTmp;
00338 char* l_pszTmp2;
00339 char* l_pszFieldDBSpec;
00340
00341
00342 DEBUG_IN(OTL_getColumnDDL)
00343
00344 l_pszFieldDBSpec = copyCharBuffer( p_pszFieldDBSpec);
00345 l_pszTmp = l_pszFieldDBSpec;
00346
00347
00348 l_pszTmp2 = strstr( l_pszTmp, DDLSTREAMER_DBSPECSEP);
00349 if( l_pszTmp2 )
00350 {
00351 l_pszTmp2[0]='\0';
00352 l_pszOTLType = l_pszTmp;
00353 l_pszTmp = l_pszTmp2 + strlen(DDLSTREAMER_DBSPECSEP);
00354 }
00355 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_DDLHANDLER + ERRCODE_CAUSE_WRONGDATA , "OTL type is missing in DBSpec field " , l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00356
00357
00358 l_pszTmp2 = strstr( l_pszTmp, DDLSTREAMER_DBSPECSEP);
00359 if( l_pszTmp2 )
00360 {
00361 l_pszTmp2[0]='\0';
00362 l_pszDBType = l_pszTmp;
00363 l_pszTmp = l_pszTmp2 + strlen(DDLSTREAMER_DBSPECSEP);
00364 }
00365 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_DDLHANDLER + ERRCODE_CAUSE_WRONGDATA , "DB type is missing in DBSpec field " , l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00366
00367
00368
00369 l_pszTmp2 = strstr( l_pszTmp, DDLSTREAMER_DBSPECSEP);
00370 if( l_pszTmp2 )
00371 {
00372 l_pszTmp2[0]='\0';
00373 l_pszDBSize = l_pszTmp;
00374 l_pszTmp = l_pszTmp2 + strlen(DDLSTREAMER_DBSPECSEP);
00375 }
00376 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_DDLHANDLER + ERRCODE_CAUSE_WRONGDATA , "DB size is missing in DBSpec field ", l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00377
00378
00379 l_pszTmp2 = strstr( l_pszTmp, DDLSTREAMER_DBSPECSEP);
00380 if( l_pszTmp2)
00381 {
00382 l_pszTmp2[0]='\0';
00383 l_pszDBScale = l_pszTmp;
00384 l_pszTmp = l_pszTmp2 + strlen(DDLSTREAMER_DBSPECSEP);
00385 }
00386 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_DDLHANDLER + ERRCODE_CAUSE_WRONGDATA , "DB scale is missing in DBSpec field " , l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00387
00388
00389 l_pszTmp2 = strstr( l_pszTmp, DDLSTREAMER_DBSPECSEP);
00390 if( l_pszTmp2 )
00391 {
00392 l_pszTmp2[0]='\0';
00393 l_pszDBPrec = l_pszTmp;
00394 l_pszTmp = l_pszTmp2 + strlen(DDLSTREAMER_DBSPECSEP);
00395 }
00396 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_DDLHANDLER + ERRCODE_CAUSE_WRONGDATA , "DB precision is missing in DBSpec field " , l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00397
00398
00399 if(strlen(l_pszTmp) > 0)
00400 {
00401 l_pszDBNullOK = l_pszTmp;
00402 }
00403 else THROW_XMLFLOW_EXCEPTION ( ERRCODE_LOC_DDLHANDLER + ERRCODE_CAUSE_WRONGDATA , "NULL OK is missing in DBSpec field ", l_pszFieldDBSpec, "DDLStreamer::makeNodeDDL", "", false);
00404
00405
00406 l_intOTLType=atoi(l_pszOTLType);
00407
00408 switch( l_intOTLType)
00409 {
00410 case otl_var_char:
00411
00412 l_pszDDL = copyCharBuffer( "VARCHAR(");
00413 l_pszDDL = concatCharBuffer( l_pszDDL, l_pszDBSize );
00414 l_pszDDL = concatCharBuffer( l_pszDDL, ")") ;
00415 break;
00416 case otl_var_double:
00417
00418 if(l_pszDBPrec !="0")
00419 {
00420 l_pszDDL = copyCharBuffer( "FLOAT" );
00421 l_pszDDL = concatCharBuffer( l_pszDDL, "(");
00422 l_pszDDL = concatCharBuffer( l_pszDDL, l_pszDBPrec );
00423 l_pszDDL = concatCharBuffer( l_pszDDL, ")" );
00424 }
00425 else l_pszDDL = copyCharBuffer( "INTEGER" );
00426 break;
00427 case otl_var_float:
00428
00429 if(l_pszDBPrec !="0")
00430 {
00431 l_pszDDL = copyCharBuffer( "FLOAT" );
00432 l_pszDDL = concatCharBuffer( l_pszDDL, "(");
00433 l_pszDDL = concatCharBuffer( l_pszDDL, l_pszDBPrec );
00434 l_pszDDL = concatCharBuffer( l_pszDDL, ")" );
00435 }
00436 else l_pszDDL = copyCharBuffer( "INTEGER" );
00437 break;
00438 case otl_var_int:
00439
00440 l_pszDDL= copyCharBuffer( "INTEGER" );
00441 break;
00442 case otl_var_unsigned_int:
00443
00444 l_pszDDL= copyCharBuffer( "INTEGER" );
00445 break;
00446 case otl_var_short:
00447
00448 l_pszDDL= copyCharBuffer( "SMALLINT" );
00449 break;
00450 case otl_var_long_int:
00451
00452 l_pszDDL= copyCharBuffer( "INTEGER" );
00453 break;
00454 case otl_var_timestamp:
00455
00456 if (p_uiSQLSyntax==SQL_SYNTAX_ORA)
00457 {
00458 l_pszDDL= copyCharBuffer( "DATE" );
00459 }
00460 else if (p_uiSQLSyntax==SQL_SYNTAX_MSSQL)
00461 {
00462 l_pszDDL= copyCharBuffer( "TIMESTAMP" );
00463 }
00464 else if (p_uiSQLSyntax==SQL_SYNTAX_DB2)
00465 {
00466 l_pszDDL= copyCharBuffer( "TIMESTAMP" );
00467 }
00468 break;
00469 case otl_var_varchar_long:
00470
00471 if (p_uiSQLSyntax==SQL_SYNTAX_ORA)
00472 {
00473 l_pszDDL= copyCharBuffer( "LONG" );
00474 }
00475 else if (p_uiSQLSyntax==SQL_SYNTAX_MSSQL)
00476 {
00477 l_pszDDL= copyCharBuffer( "TEXT" );
00478 }
00479 else if (p_uiSQLSyntax==SQL_SYNTAX_DB2)
00480 {
00481 l_pszDDL= copyCharBuffer( "CLOB" );
00482 }
00483 break;
00484 case otl_var_raw_long:
00485
00486 if (p_uiSQLSyntax==SQL_SYNTAX_ORA)
00487 {
00488 l_pszDDL= copyCharBuffer( "LONG RAW" );
00489 }
00490 else if (p_uiSQLSyntax==SQL_SYNTAX_MSSQL)
00491 {
00492 l_pszDDL= copyCharBuffer( "IMAGE" );
00493 }
00494 else if (p_uiSQLSyntax==SQL_SYNTAX_DB2)
00495 {
00496 l_pszDDL= copyCharBuffer( "BLOB" );
00497 }
00498 break;
00499 case otl_var_clob:
00500
00501 l_pszDDL= copyCharBuffer( "CLOB" );
00502 break;
00503 case otl_var_blob:
00504
00505 l_pszDDL= copyCharBuffer( "BLOB" );
00506 break;
00507 }
00508
00509 DEBUG_OUT(OTL_getColumnDDL)
00510
00511 return l_pszDDL;
00512 }
00513
00514 END_XDFLENGINE_NS
00515
00516