📄 otlv4.h
字号:
}#define OTL_NO_STM_TEXT "#No Stm Text available#"class otl_datetime{public: int year; int month; int day; int hour; int minute; int second; unsigned long fraction; int frac_precision;#if defined(OTL_ORA_TIMESTAMP) short int tz_hour; short int tz_minute;#endif otl_datetime() { year=1900; month=1; day=1; hour=0; minute=0; second=0; fraction=0; frac_precision=0;#if defined(OTL_ORA_TIMESTAMP) tz_hour=0; tz_minute=0;#endif } otl_datetime (const int ayear, const int amonth, const int aday, const int ahour, const int aminute, const int asecond, const unsigned long afraction=0, const int afrac_precision=0#if defined(OTL_ORA_TIMESTAMP) , const short int atz_hour=0, const short int atz_minute=0#endif ) { year=ayear; month=amonth; day=aday; hour=ahour; minute=aminute; second=asecond; fraction=afraction; frac_precision=afrac_precision;#if defined(OTL_ORA_TIMESTAMP) tz_hour=atz_hour; tz_minute=atz_minute;#endif } otl_datetime(const otl_datetime& dt) { copy(dt); } ~otl_datetime(){} otl_datetime& operator=(const otl_datetime& dt) { copy(dt); return *this; }protected: void copy(const otl_datetime& dt) { year=dt.year; month=dt.month; day=dt.day; hour=dt.hour; minute=dt.minute; second=dt.second; fraction=dt.fraction; frac_precision=dt.frac_precision;#if defined(OTL_ORA_TIMESTAMP) tz_hour=dt.tz_hour; tz_minute=dt.tz_minute;#endif }};class otl_oracle_date{public: unsigned char century; unsigned char year; unsigned char month; unsigned char day; unsigned char hour; unsigned char minute; unsigned char second; otl_oracle_date(){} ~otl_oracle_date(){}};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_) OTL_STRCPY_S(name,name_len_,desc.name); else if(name==0 && desc.name!=0){ name=new char[desc.name_len_]; name_len_=desc.name_len_; OTL_STRCPY_S(name,name_len_,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_; OTL_STRCPY_S(name,name_len_,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{#if defined(_MSC_VER)#if (_MSC_VER >= 1400) OTL_STRNCPY_S(name,sizeof(name),nm,sizeof(name)-1); name[sizeof(name)-1]=0;#else strncpy(name,nm,sizeof(name)); name[sizeof(name)-1]=0;#endif#else strncpy(name,nm,sizeof(name)); name[sizeof(name)-1]=0;#endif } }};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)); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -