📄 otlv4.h
字号:
};inline void convert_date(otl_datetime& t,const otl_oracle_date& s){ t.year=(OTL_SCAST(int, s.century-100)*100+(OTL_SCAST(int, s.year-100))); t.month=s.month; t.day=s.day; t.hour=s.hour-1; t.minute=s.minute-1; t.second=s.second-1;}inline void convert_date(otl_oracle_date& t,const otl_datetime& s){ t.year=OTL_SCAST(unsigned char, ((s.year%100)+100)); t.century=OTL_SCAST(unsigned char, ((s.year/100)+100)); t.month=OTL_SCAST(unsigned char, s.month); t.day=OTL_SCAST(unsigned char, s.day); t.hour=OTL_SCAST(unsigned char, (s.hour+1)); t.minute=OTL_SCAST(unsigned char, (s.minute+1)); t.second=OTL_SCAST(unsigned char, (s.second+1));}class otl_null{public:#if (defined(_MSC_VER)&&(_MSC_VER==1200)) int dummy; // this is to fix a compiler bug in VC++ 6.0#endif otl_null(){} ~otl_null(){}};class otl_column_desc{public: char* name; int dbtype; int otl_var_dbtype;#if defined(_WIN64) __int64 dbsize;#else int dbsize;#endif int scale;#if defined(_WIN64) __int64 prec;#else int prec;#endif int nullok;#if defined(OTL_ORA_UNICODE)||defined(OTL_ORA_UTF8) int charset_form; int char_size;#endif otl_column_desc() { name=0; name_len_=0; dbtype=0; otl_var_dbtype=0; dbsize=0; scale=0; prec=0; nullok=0;#if defined(OTL_ORA_UNICODE) charset_form=0; char_size=0;#endif } ~otl_column_desc() { delete[] name; } otl_column_desc& operator=(const otl_column_desc& desc) { if(name_len_>=desc.name_len_) strcpy(name,desc.name); else if(name==0 && desc.name!=0){ name=new char[desc.name_len_]; name_len_=desc.name_len_; strcpy(name,desc.name); }else if(name_len_<desc.name_len_ && desc.name!=0){ delete[] name; name=new char[desc.name_len_]; name_len_=desc.name_len_; strcpy(name,desc.name); } dbtype=desc.dbtype; otl_var_dbtype=desc.otl_var_dbtype; dbsize=desc.dbsize; scale=desc.scale; prec=desc.prec; nullok=desc.nullok;#if defined(OTL_ORA_UNICODE)||defined(OTL_ORA_UTF8) charset_form=desc.charset_form; char_size=desc.char_size;#endif return *this; } void set_name(const char* aname,const int aname_len=0) { int len; if(aname_len==0) len=OTL_SCAST(int,strlen(aname))+1; else len=aname_len+1; if(name_len_<len){ if(name)delete[] name; name=new char[len]; name_len_=len; for(int i=0;i<len-1;++i) name[i]=aname[i]; name[len-1]=0; } }protected: int name_len_;};class otl_var_desc{public: int param_type; int ftype; int elem_size; int array_size; int pos; int name_pos; char name[128]; int pl_tab_flag; otl_var_desc() { param_type=0; ftype=0; elem_size=0; array_size=0; pos=0; name_pos=0; name[0]=0; pl_tab_flag=0; } ~otl_var_desc(){} void copy_name(const char* nm) { if(!nm) name[0]=0; else{ strncpy(name,nm,sizeof(name)); name[sizeof(name)-1]=0; } }};const int otl_var_none=0;const int otl_var_char=1;const int otl_var_double=2;const int otl_var_float=3;const int otl_var_int=4;const int otl_var_unsigned_int=5;const int otl_var_short=6;const int otl_var_long_int=7;const int otl_var_timestamp=8;const int otl_var_varchar_long=9;const int otl_var_raw_long=10;const int otl_var_clob=11;const int otl_var_blob=12;const int otl_var_refcur=13;const int otl_var_long_string=15;const int otl_var_db2time=16;const int otl_var_db2date=17;const int otl_var_tz_timestamp=18;const int otl_var_ltz_timestamp=19;const int otl_var_bigint=20;#if defined(OTL_ORA_UNICODE)||defined(OTL_ORA_UTF8)const int otl_var_nchar=21;const int otl_var_nclob=22;#else#endifconst int otl_var_raw=23;const int otl_var_lob_stream=100;const int otl_bigint_str_size=40;class otl_long_string{public: unsigned char* v; int length; int extern_buffer_flag; int buf_size; bool this_is_last_piece_; otl_long_string(const int buffer_size=32760,const int input_length=0) { this_is_last_piece_=false; if(buffer_size==0){ v=0; length=0; extern_buffer_flag=0; }else{ extern_buffer_flag=0; length=input_length; buf_size=buffer_size; v=new unsigned char[buffer_size+1]; memset(v,0,buffer_size); } } otl_long_string (const void* external_buffer, const int buffer_size, const int input_length=0) { this_is_last_piece_=false; extern_buffer_flag=1; length=input_length; buf_size=buffer_size; v=OTL_RCAST(unsigned char*, OTL_CCAST(void*, external_buffer)); } otl_long_string& operator=(const otl_long_string& s) { this_is_last_piece_=s.this_is_last_piece_; if(s.extern_buffer_flag){ if(!extern_buffer_flag) delete[] v; v=s.v; length=s.length; extern_buffer_flag=s.extern_buffer_flag; buf_size=s.buf_size; }else{ if(extern_buffer_flag){ v=new unsigned char[s.buf_size]; buf_size=s.buf_size; }else if(buf_size<s.buf_size){ delete[] v; v=new unsigned char[s.buf_size]; buf_size=s.buf_size; } length=s.length; extern_buffer_flag=s.extern_buffer_flag; memcpy(v,s.v,length); if(length<buf_size&&s.v[length]==0) v[length]=0; } return *this; } otl_long_string(const otl_long_string& s) { this_is_last_piece_=s.this_is_last_piece_; length=s.length; extern_buffer_flag=s.extern_buffer_flag; buf_size=s.buf_size; if(s.extern_buffer_flag) v=s.v; else{ v=new unsigned char[buf_size]; memcpy(v,s.v,length); if(length<buf_size&&s.v[length]==0) v[length]=0; } } virtual ~otl_long_string() { if(!extern_buffer_flag)delete[] v; } void set_len(const int alen=0){length=alen;} int len(void)const {return length;} void set_last_piece(const bool this_is_last_piece=false) { this_is_last_piece_=this_is_last_piece; } unsigned char& operator[](int ndx){return v[ndx];} virtual void null_terminate_string(const int alen) { (*this)[alen]=0; }};#if defined(OTL_UNICODE)class otl_long_unicode_string: public otl_long_string{public: otl_long_unicode_string(const int buffer_size=32760,const int input_length=0) : otl_long_string(0,0) { extern_buffer_flag=0; length=input_length; buf_size=buffer_size; v=new unsigned char[(buffer_size+1)*sizeof(OTL_WCHAR)]; memset(v,0,buffer_size*sizeof(OTL_WCHAR)); } otl_long_unicode_string (const void* external_buffer, const int buffer_size, const int input_length=0) : otl_long_string(external_buffer,buffer_size,input_length) { extern_buffer_flag=1; length=input_length; buf_size=buffer_size; v=OTL_RCAST(unsigned char*, OTL_CCAST(void*, external_buffer)); } virtual ~otl_long_unicode_string(){} OTL_CHAR& operator[](int ndx) { return OTL_RCAST(OTL_CHAR*,v)[ndx]; } virtual void null_terminate_string(const int alen) { (*this)[alen]=0; }};#endifinline const char* otl_var_type_name(const int ftype){ const char* const_CHAR="CHAR"; const char* const_DOUBLE="DOUBLE"; const char* const_FLOAT="FLOAT"; const char* const_INT="INT"; const char* const_UNSIGNED_INT="UNSIGNED INT"; const char* const_SHORT_INT="SHORT INT"; const char* const_LONG_INT="LONG INT"; const char* const_TIMESTAMP="TIMESTAMP"; const char* const_DB2DATE="DB2DATE"; const char* const_DB2TIME="DB2TIME"; const char* const_TZ_TIMESTAMP="TIMESTAMP WITH TIME ZONE"; const char* const_LTZ_TIMESTAMP="TIMESTAMP WITH LOCAL TIME ZONE"; const char* const_BIGINT="BIGINT"; const char* const_VARCHAR_LONG="VARCHAR LONG"; const char* const_RAW_LONG="RAW LONG"; const char* const_CLOB="CLOB"; const char* const_BLOB="BLOB"; const char* const_RAW="RAW"; const char* const_UNKNOWN="UNKNOWN"; const char* const_LONG_STRING="otl_long_string()"; const char* const_LOB_STREAM="otl_lob_stream*&"; const char* const_USER_DEFINED="User-defined type (object type, VARRAY, Nested Table)"; switch(ftype){ case otl_var_char: return const_CHAR; case otl_var_double: return const_DOUBLE; case otl_var_float: return const_FLOAT; case otl_var_int: return const_INT; case otl_var_unsigned_int: return const_UNSIGNED_INT; case otl_var_short: return const_SHORT_INT; case otl_var_long_int: return const_LONG_INT; case otl_var_timestamp: return const_TIMESTAMP; case otl_var_db2date: return const_DB2DATE; case otl_var_db2time: return const_DB2TIME; case otl_var_tz_timestamp: return const_TZ_TIMESTAMP; case otl_var_ltz_timestamp: return const_LTZ_TIMESTAMP; case otl_var_bigint: return const_BIGINT; case otl_var_varchar_long: return const_VARCHAR_LONG; case otl_var_raw_long: return const_RAW_LONG; case otl_var_clob: return const_CLOB; case otl_var_blob: return const_BLOB; case otl_var_raw: return const_RAW; case otl_var_long_string: return const_LONG_STRING; case otl_var_lob_stream: return const_LOB_STREAM; case 108: return const_USER_DEFINED; default: return const_UNKNOWN; }}inline void otl_var_info_var(const char* name, const int ftype, const int type_code, char* var_info){char buf1[128]; char buf2[128]; strcpy(buf1,otl_var_type_name(ftype)); strcpy(buf2,otl_var_type_name(type_code)); strcpy(var_info,"Variable: "); strcat(var_info,name); strcat(var_info,"<"); strcat(var_info,buf1); strcat(var_info,">, datatype in operator <</>>: "); strcat(var_info,buf2);}inline void otl_var_info_var2(const char* name, const int ftype, char* var_info){char buf1[128]; strcpy(buf1,otl_var_type_name(ftype)); strcpy(var_info,"Variable: "); strcat(var_info,name); strcat(var_info,"<"); strcat(var_info,buf1); strcat(var_info,">");}inline void otl_var_info_var3(const char* name, const int ftype, const int type_code, char* var_info){char buf1[128]; char buf2[128]; strcpy(buf1,otl_var_type_name(ftype)); strcpy(buf2,otl_var_type_name(type_code)); strcpy(var_info,"Variable: "); strcat(var_info,name); strcat(var_info,"<"); strcat(var_info,buf1); strcat(var_info,">, datatype in otl_stream_read_iterator::get(): "); strcat(var_info,buf2);}inline void otl_var_info_var4(const char* name, const int ftype, const int type_code, char* var_info){char buf1[128]; char buf2[128]; strcpy(buf1,otl_var_type_name(ftype)); strcpy(buf2,otl_var_type_name(type_code)); strcpy(var_info,"Variable: "); strcat(var_info,name); strcat(var_info,"<"); strcat(var_info,buf1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -