00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <spl/Exception.h>
00018 #include <spl/data/ColumnTypes.h>
00019 #include <spl/Double.h>
00020 #include <spl/Int32.h>
00021 #include <spl/Int64.h>
00022
00023 #if defined(HAVE_SQLFRONT_H) && defined(HAVE_SQLDB_H)
00024
00025 #ifdef _WIN32
00026 #include <windows.h>
00027 #endif
00028 #ifdef HAVE_TIME_H
00029 #include <time.h>
00030 #endif
00031 #ifdef HAVE_SYS_TYPE_H
00032 #include <sys/time.h>
00033 #endif
00034
00035 extern "C" {
00036 #include <sqlfront.h>
00037 #include <sqldb.h>
00038 #include <sybdb.h>
00039 };
00040
00041 #endif
00042
00043 void _ReverseBytes(byte *data, int len)
00044 {
00045 ASSERT((len % 2) == 0);
00046
00047 for ( int x = 0; x < len/2; x++ )
00048 {
00049 byte b = data[x];
00050 int x2 = (len-x)-1;
00051 ASSERT(x2 >= 0);
00052 data[x] = data[x2];
00053 data[x2] = b;
00054 }
00055 }
00056
00057 Int8Column::Int8Column(const String& name)
00058 : IColumn(name, 1), m_data()
00059 {
00060 }
00061
00062 Int8Column::~Int8Column() {}
00063
00064 int Int8Column::Count() const { return m_data.Count(); }
00065 int Int8Column::Type() const { return DbSqlType::SQL_TYPE_INT8; }
00066
00067 IColumn *Int8Column::Clone() const
00068 {
00069 Int8Column *col = new Int8Column(m_name.GetChars());
00070 col->m_data = m_data;
00071 return col;
00072 }
00073
00074 void Int8Column::Append( int8 i ) { m_data.Add( i ); }
00075 void Int8Column::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00076 void Int8Column::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00077 void Int8Column::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00078 void Int8Column::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00079 void Int8Column::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00080 void Int8Column::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00081 void Int8Column::Append( bool i ) { throw new InvalidTypeConversionException(); }
00082 void Int8Column::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00083 void Int8Column::Append( Date i ) { throw new InvalidTypeConversionException(); }
00084 void Int8Column::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00085 void Int8Column::AppendParse( const char *data, const int len) { m_data.Add( (int8)atoi(data) ); }
00086 void Int8Column::Append( void *data, int len )
00087 {
00088 ASSERT(len != 0);
00089
00090 #if LITTLE_ENDIAN
00091 Append( ((byte *)data)[len-1] );
00092 #else
00093 Append( ((byte *)data)[0] );
00094 #endif
00095 }
00096 void Int8Column::Append( IColumn *col, const int row ) { Append(col->GetByte(row)); }
00097 void Int8Column::AppendNull() { Append(0); }
00098
00099 int8 Int8Column::GetByte(const int row) { return m_data.ElementAt(row); }
00100 int16 Int8Column::GetInt16(const int row) { return (int16)m_data.ElementAt(row); }
00101 int32 Int8Column::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00102 int64 Int8Column::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00103 Decimal Int8Column::GetDecimal(const int row) { return Decimal(m_data.ElementAt(row)); }
00104 float32 Int8Column::GetFloat32(const int row) { return (float32)m_data.ElementAt(row); }
00105 float64 Int8Column::GetFloat64(const int row) { return (float64)m_data.ElementAt(row); }
00106 bool Int8Column::GetBit(const int row) { return 0 != m_data.ElementAt(row); }
00107 DateTime Int8Column::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00108 Date Int8Column::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00109 DateTime Int8Column::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00110 StringPtr Int8Column::GetChar(const int row) { ASSERT(row >= 0); return Int32::ToString(GetInt32(row)); }
00111 StringPtr Int8Column::GetVarchar(const int row) { ASSERT(row >= 0); return Int32::ToString(GetInt32(row)); }
00112 Variant Int8Column::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00113
00114 #if defined(DEBUG)
00115 void Int8Column::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00116 void Int8Column::ValidateMem() const { IColumn::ValidateMem(); IColumn::ValidateMem(); m_data.ValidateMem(); }
00117 #endif
00118
00119 Int16Column::Int16Column(const String& name)
00120 : IColumn(name, 2), m_data()
00121 {
00122 }
00123
00124 Int16Column::~Int16Column() { }
00125
00126 int Int16Column::Count() const { return m_data.Count(); }
00127 int Int16Column::Type() const { return DbSqlType::SQL_TYPE_INT16; }
00128
00129 IColumn *Int16Column::Clone() const
00130 {
00131 Int16Column *col = new Int16Column(m_name.GetChars());
00132 col->m_data = m_data;
00133 return col;
00134 }
00135
00136 void Int16Column::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00137 void Int16Column::Append( int16 i ) { m_data.Add( i ); }
00138 void Int16Column::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00139 void Int16Column::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00140 void Int16Column::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00141 void Int16Column::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00142 void Int16Column::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00143 void Int16Column::Append( bool i ) { throw new InvalidTypeConversionException(); }
00144 void Int16Column::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00145 void Int16Column::Append( Date i ) { throw new InvalidTypeConversionException(); }
00146 void Int16Column::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00147 void Int16Column::AppendParse( const char *data, const int len) { m_data.Add( (int16)atoi(data) ); }
00148 void Int16Column::Append( void *data, int len )
00149 {
00150 ASSERT(len >= 2);
00151
00152 #if LITTLE_ENDIAN
00153 Append( *(int16 *)&((byte *)data)[len-2] );
00154 #else
00155 Append( *(int16 *)&((byte *)data)[1] );
00156 #endif
00157 }
00158 void Int16Column::Append( IColumn *col, const int row ) { Append(col->GetInt16(row)); }
00159 void Int16Column::AppendNull() { Append(0); }
00160
00161 int8 Int16Column::GetByte(const int row) { return (int8)m_data.ElementAt(row); }
00162 int16 Int16Column::GetInt16(const int row) { return m_data.ElementAt(row); }
00163 int32 Int16Column::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00164 int64 Int16Column::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00165 Decimal Int16Column::GetDecimal(const int row) { return Decimal(m_data.ElementAt(row)); }
00166 float32 Int16Column::GetFloat32(const int row) { return (float32)m_data.ElementAt(row); }
00167 float64 Int16Column::GetFloat64(const int row) { return (float64)m_data.ElementAt(row); }
00168 bool Int16Column::GetBit(const int row) { return 0 != m_data.ElementAt(row); }
00169 DateTime Int16Column::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00170 Date Int16Column::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00171 DateTime Int16Column::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00172 StringPtr Int16Column::GetChar(const int row) { ASSERT(row >= 0); return Int32::ToString(GetInt32(row)); }
00173 StringPtr Int16Column::GetVarchar(const int row) { ASSERT(row >= 0); return Int32::ToString(GetInt32(row)); }
00174 Variant Int16Column::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00175
00176 #if defined(DEBUG)
00177 void Int16Column::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00178 void Int16Column::ValidateMem() const { IColumn::ValidateMem(); IColumn::ValidateMem(); m_data.ValidateMem(); }
00179 #endif
00180
00181 Int32Column::Int32Column(const String& name)
00182 : IColumn(name, 4), m_data()
00183 {
00184 }
00185
00186 Int32Column::~Int32Column() { }
00187
00188 int Int32Column::Count() const { return m_data.Count(); }
00189 int Int32Column::Type() const { return DbSqlType::SQL_TYPE_INT32; }
00190
00191 IColumn *Int32Column::Clone() const
00192 {
00193 Int32Column *col = new Int32Column(m_name.GetChars());
00194 col->m_data = m_data;
00195 return col;
00196 }
00197
00198 void Int32Column::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00199 void Int32Column::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00200 void Int32Column::Append( int32 i ) { m_data.Add( i ); }
00201 void Int32Column::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00202 void Int32Column::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00203 void Int32Column::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00204 void Int32Column::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00205 void Int32Column::Append( bool i ) { throw new InvalidTypeConversionException(); }
00206 void Int32Column::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00207 void Int32Column::Append( Date i ) { throw new InvalidTypeConversionException(); }
00208 void Int32Column::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00209 void Int32Column::AppendParse( const char *data, const int len) { m_data.Add( (int32)atoi(data) ); }
00210 void Int32Column::Append( void *data, int len )
00211 {
00212 ASSERT(len >= 4);
00213
00214 #if LITTLE_ENDIAN
00215 Append( *(int32 *)&((byte *)data)[len-4] );
00216 #else
00217 Append( *(int32 *)&((byte *)data)[3] );
00218 #endif
00219 }
00220 void Int32Column::Append( IColumn *col, const int row ) { Append(col->GetInt32(row)); }
00221 void Int32Column::AppendNull() { Append(0); }
00222
00223 int8 Int32Column::GetByte(const int row) { return (int8)m_data.ElementAt(row); }
00224 int16 Int32Column::GetInt16(const int row) { return (int16)m_data.ElementAt(row); }
00225 int32 Int32Column::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00226 int64 Int32Column::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00227 Decimal Int32Column::GetDecimal(const int row) { return Decimal(m_data.ElementAt(row)); }
00228 float32 Int32Column::GetFloat32(const int row) { return (float32)m_data.ElementAt(row); }
00229 float64 Int32Column::GetFloat64(const int row) { return (float64)m_data.ElementAt(row); }
00230 bool Int32Column::GetBit(const int row) { return 0 != m_data.ElementAt(row); }
00231 DateTime Int32Column::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00232 Date Int32Column::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00233 DateTime Int32Column::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00234 StringPtr Int32Column::GetChar(const int row) { ASSERT(row >= 0); return Int32::ToString(GetInt32(row)); }
00235 StringPtr Int32Column::GetVarchar(const int row) { ASSERT(row >= 0); return Int32::ToString(GetInt32(row)); }
00236 Variant Int32Column::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00237
00238 #if defined(DEBUG)
00239 void Int32Column::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00240 void Int32Column::ValidateMem() const { IColumn::ValidateMem(); IColumn::ValidateMem(); m_data.ValidateMem(); }
00241 #endif
00242
00243 Int64Column::Int64Column(const String& name)
00244 : IColumn(name, 8), m_data()
00245 {
00246 }
00247
00248 Int64Column::~Int64Column() { }
00249
00250 int Int64Column::Count() const { return m_data.Count(); }
00251 int Int64Column::Type() const { return DbSqlType::SQL_TYPE_INT64; }
00252
00253 IColumn *Int64Column::Clone() const
00254 {
00255 Int64Column *col = new Int64Column(m_name.GetChars());
00256 col->m_data = m_data;
00257 return col;
00258 }
00259
00260 void Int64Column::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00261 void Int64Column::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00262 void Int64Column::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00263 void Int64Column::Append( int64 i ) { m_data.Add( i ); }
00264 void Int64Column::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00265 void Int64Column::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00266 void Int64Column::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00267 void Int64Column::Append( bool i ) { throw new InvalidTypeConversionException(); }
00268 void Int64Column::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00269 void Int64Column::Append( Date i ) { throw new InvalidTypeConversionException(); }
00270 void Int64Column::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00271 void Int64Column::AppendParse( const char *data, const int len) { m_data.Add( atol(data) ); }
00272 void Int64Column::Append( void *data, int len )
00273 {
00274 ASSERT(len >= 8);
00275
00276 #if LITTLE_ENDIAN
00277 Append( *(int32 *)&((byte *)data)[len-8] );
00278 #else
00279 Append( *(int32 *)&((byte *)data)[7] );
00280 #endif
00281 }
00282 void Int64Column::Append( IColumn *col, const int row ) { Append(col->GetInt64(row)); }
00283 void Int64Column::AppendNull() { Append(0); }
00284
00285 int8 Int64Column::GetByte(const int row) { return (int8)m_data.ElementAt(row); }
00286 int16 Int64Column::GetInt16(const int row) { return (int16)m_data.ElementAt(row); }
00287 int32 Int64Column::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00288 int64 Int64Column::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00289 Decimal Int64Column::GetDecimal(const int row) { return Decimal(m_data.ElementAt(row)); }
00290 float32 Int64Column::GetFloat32(const int row) { return (float32)m_data.ElementAt(row); }
00291 float64 Int64Column::GetFloat64(const int row) { return (float64)m_data.ElementAt(row); }
00292 bool Int64Column::GetBit(const int row) { return 0 != m_data.ElementAt(row); }
00293 DateTime Int64Column::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00294 Date Int64Column::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00295 DateTime Int64Column::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00296 StringPtr Int64Column::GetChar(const int row) { throw new InvalidTypeConversionException(); }
00297 StringPtr Int64Column::GetVarchar(const int row) { throw new InvalidTypeConversionException(); }
00298 Variant Int64Column::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00299
00300 #if defined(DEBUG)
00301 void Int64Column::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00302 void Int64Column::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00303 #endif
00304
00305 Float32Column::Float32Column(const String& name)
00306 : IColumn(name, 4), m_data()
00307 {
00308 }
00309
00310 Float32Column::~Float32Column() { }
00311
00312 int Float32Column::Count() const { return m_data.Count(); }
00313 int Float32Column::Type() const { return DbSqlType::SQL_TYPE_FLOAT32; }
00314
00315 IColumn *Float32Column::Clone() const
00316 {
00317 Float32Column *col = new Float32Column(m_name.GetChars());
00318 col->m_data = m_data;
00319 return col;
00320 }
00321
00322 void Float32Column::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00323 void Float32Column::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00324 void Float32Column::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00325 void Float32Column::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00326 void Float32Column::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00327 void Float32Column::Append( float32 i ) { m_data.Add( i ); }
00328 void Float32Column::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00329 void Float32Column::Append( bool i ) { throw new InvalidTypeConversionException(); }
00330 void Float32Column::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00331 void Float32Column::Append( Date i ) { throw new InvalidTypeConversionException(); }
00332 void Float32Column::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00333 void Float32Column::Append( void *data, int len )
00334 {
00335 ASSERT(len == 4);
00336
00337 #if LITTLE_ENDIAN
00338 Append( *(float32 *)data );
00339 #else
00340 _ReverseBytes((byte *)data, len);
00341 Append( *(float32 *)data );
00342 #endif
00343 }
00344 void Float32Column::Append( IColumn *col, const int row ) { Append(col->GetFloat32(row)); }
00345 void Float32Column::AppendNull() { Append(0); }
00346
00347 int8 Float32Column::GetByte(const int row) { return (int8)m_data.ElementAt(row); }
00348 int16 Float32Column::GetInt16(const int row) { return (int16)m_data.ElementAt(row); }
00349 int32 Float32Column::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00350 int64 Float32Column::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00351 Decimal Float32Column::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00352 float32 Float32Column::GetFloat32(const int row) { return m_data.ElementAt(row); }
00353 float64 Float32Column::GetFloat64(const int row) { return (float64)m_data.ElementAt(row); }
00354 bool Float32Column::GetBit(const int row) { return 0 != m_data.ElementAt(row); }
00355 DateTime Float32Column::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00356 Date Float32Column::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00357 DateTime Float32Column::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00358 StringPtr Float32Column::GetChar(const int row) { ASSERT(row >= 0); return Double::ToString(GetFloat64(row)); }
00359 StringPtr Float32Column::GetVarchar(const int row) { ASSERT(row >= 0); return Double::ToString(GetFloat64(row)); }
00360 void Float32Column::AppendParse( const char *data, const int len) { m_data.Add( (float32)atof(data) ); }
00361 Variant Float32Column::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00362
00363 #if defined(DEBUG)
00364 void Float32Column::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00365 void Float32Column::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00366 #endif
00367
00368 Float64Column::Float64Column(const String& name)
00369 : IColumn(name, 8), m_data()
00370 {
00371 }
00372
00373 Float64Column::~Float64Column() { }
00374
00375 int Float64Column::Count() const { return m_data.Count(); }
00376 int Float64Column::Type() const { return DbSqlType::SQL_TYPE_FLOAT64; }
00377
00378 IColumn *Float64Column::Clone() const
00379 {
00380 Float64Column *col = new Float64Column(m_name.GetChars());
00381 col->m_data = m_data;
00382 return col;
00383 }
00384
00385 void Float64Column::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00386 void Float64Column::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00387 void Float64Column::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00388 void Float64Column::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00389 void Float64Column::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00390 void Float64Column::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00391 void Float64Column::Append( float64 i ) { m_data.Add( i ); }
00392 void Float64Column::Append( bool i ) { throw new InvalidTypeConversionException(); }
00393 void Float64Column::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00394 void Float64Column::Append( Date i ) { throw new InvalidTypeConversionException(); }
00395 void Float64Column::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00396 void Float64Column::AppendParse( const char *data, const int len) { m_data.Add( (float64)atof(data) ); }
00397 void Float64Column::Append( void *data, int len )
00398 {
00399 ASSERT(len == 8);
00400
00401 #if LITTLE_ENDIAN
00402 Append( *(float64 *)data );
00403 #else
00404 _ReverseBytes((byte *)data, len);
00405 Append( *(float64 *)data );
00406 #endif
00407 }
00408 void Float64Column::Append( IColumn *col, const int row ) { Append(col->GetFloat64(row)); }
00409 void Float64Column::AppendNull() { Append(0); }
00410
00411 int8 Float64Column::GetByte(const int row) { return (int8)m_data.ElementAt(row); }
00412 int16 Float64Column::GetInt16(const int row) { return (int16)m_data.ElementAt(row); }
00413 int32 Float64Column::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00414 int64 Float64Column::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00415 Decimal Float64Column::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00416 float32 Float64Column::GetFloat32(const int row) { return (float32)m_data.ElementAt(row); }
00417 float64 Float64Column::GetFloat64(const int row) { return m_data.ElementAt(row); }
00418 bool Float64Column::GetBit(const int row) { return 0 != m_data.ElementAt(row); }
00419 DateTime Float64Column::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00420 Date Float64Column::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00421 DateTime Float64Column::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00422 StringPtr Float64Column::GetChar(const int row) { throw new InvalidTypeConversionException(); }
00423 StringPtr Float64Column::GetVarchar(const int row) { throw new InvalidTypeConversionException(); }
00424 Variant Float64Column::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00425
00426 #if defined(DEBUG)
00427 void Float64Column::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00428 void Float64Column::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00429 #endif
00430
00431 DecimalColumn::DecimalColumn(const String& name, const int maxlen)
00432 : IColumn(name, maxlen), m_data()
00433 {
00434 }
00435
00436 DecimalColumn::~DecimalColumn() { }
00437
00438 int DecimalColumn::Count() const { return m_data.Count(); }
00439 int DecimalColumn::Type() const { return DbSqlType::SQL_TYPE_DECIMAL; }
00440
00441 IColumn *DecimalColumn::Clone() const
00442 {
00443 DecimalColumn *col = new DecimalColumn(m_name.GetChars(), m_maxlen);
00444 col->m_data = m_data;
00445 return col;
00446 }
00447
00448 void DecimalColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00449 void DecimalColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00450 void DecimalColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00451 void DecimalColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00452 void DecimalColumn::Append( Decimal i ) { m_data.Add( i.RawData() ); }
00453 void DecimalColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00454 void DecimalColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00455 void DecimalColumn::Append( bool i ) { throw new InvalidTypeConversionException(); }
00456 void DecimalColumn::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00457 void DecimalColumn::Append( Date i ) { throw new InvalidTypeConversionException(); }
00458 void DecimalColumn::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00459 void DecimalColumn::AppendParse( const char *data, const int len) { m_data.Add( Decimal::Parse(data) ); }
00460 void DecimalColumn::Append( void *data, int len )
00461 {
00462 throw NotImplementedException("Decimal not yet supported");
00463 }
00464 void DecimalColumn::Append( IColumn *col, const int row ) { Append(col->GetDecimal(row)); }
00465 void DecimalColumn::AppendNull() { Append(0); }
00466
00467 int8 DecimalColumn::GetByte(const int row) { throw new InvalidTypeConversionException(); }
00468 int16 DecimalColumn::GetInt16(const int row) { throw new InvalidTypeConversionException(); }
00469 int32 DecimalColumn::GetInt32(const int row) { throw new InvalidTypeConversionException(); }
00470 int64 DecimalColumn::GetInt64(const int row) { throw new InvalidTypeConversionException(); }
00471 Decimal DecimalColumn::GetDecimal(const int row) { return Decimal(m_data.ElementAt(row)); }
00472 float32 DecimalColumn::GetFloat32(const int row) { return (float32)Decimal(m_data.ElementAt(row)).ToDouble(); }
00473 float64 DecimalColumn::GetFloat64(const int row) { return (float64)Decimal(m_data.ElementAt(row)).ToDouble(); }
00474 bool DecimalColumn::GetBit(const int row) { return m_data.ElementAt(row) != 0; }
00475 DateTime DecimalColumn::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00476 Date DecimalColumn::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00477 DateTime DecimalColumn::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00478 StringPtr DecimalColumn::GetChar(const int row) { throw new InvalidTypeConversionException(); }
00479 StringPtr DecimalColumn::GetVarchar(const int row) { throw new InvalidTypeConversionException(); }
00480 Variant DecimalColumn::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00481
00482 #if defined(DEBUG)
00483 void DecimalColumn::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00484 void DecimalColumn::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00485 #endif
00486
00487 BitColumn::BitColumn(const String& name)
00488 : IColumn(name, sizeof(bool)), m_data()
00489 {
00490 }
00491
00492 BitColumn::~BitColumn() { }
00493
00494 int BitColumn::Count() const { return m_data.Count(); }
00495 int BitColumn::Type() const { return DbSqlType::SQL_TYPE_FLAG; }
00496
00497 IColumn *BitColumn::Clone() const
00498 {
00499 BitColumn *col = new BitColumn(m_name.GetChars());
00500 col->m_data = m_data;
00501 return col;
00502 }
00503
00504 void BitColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00505 void BitColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00506 void BitColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00507 void BitColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00508 void BitColumn::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00509 void BitColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00510 void BitColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00511 void BitColumn::Append( bool i ) { m_data.Add( i ); }
00512 void BitColumn::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00513 void BitColumn::Append( Date i ) { throw new InvalidTypeConversionException(); }
00514 void BitColumn::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00515 void BitColumn::AppendParse( const char *data, const int len) { m_data.Add( 0 != atoi(data) ); }
00516 void BitColumn::Append( void *data, int len )
00517 {
00518 switch (len)
00519 {
00520 case 1:
00521 Append( *(byte *)data != 0 );
00522 break;
00523 case 2:
00524 Append( *(int16 *)data != 0 );
00525 break;
00526 case 4:
00527 Append( *(int32 *)data != 0 );
00528 break;
00529 case 8:
00530 Append( *(int64 *)data != 0 );
00531 break;
00532 default:
00533 throw Exception("Unsupported bit column length");
00534 }
00535 }
00536 void BitColumn::Append( IColumn *col, const int row ) { Append(col->GetBit(row)); }
00537 void BitColumn::AppendNull() { Append(0); }
00538
00539 int8 BitColumn::GetByte(const int row) { return (int8)m_data.ElementAt(row); }
00540 int16 BitColumn::GetInt16(const int row) { return (int16)m_data.ElementAt(row); }
00541 int32 BitColumn::GetInt32(const int row) { return (int32)m_data.ElementAt(row); }
00542 int64 BitColumn::GetInt64(const int row) { return (int64)m_data.ElementAt(row); }
00543 Decimal BitColumn::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00544 float32 BitColumn::GetFloat32(const int row) { throw new InvalidTypeConversionException(); }
00545 float64 BitColumn::GetFloat64(const int row) { throw new InvalidTypeConversionException(); }
00546 bool BitColumn::GetBit(const int row) { return m_data.ElementAt(row); }
00547 DateTime BitColumn::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00548 Date BitColumn::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00549 DateTime BitColumn::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00550 StringPtr BitColumn::GetChar(const int row) { throw new InvalidTypeConversionException(); }
00551 StringPtr BitColumn::GetVarchar(const int row) { throw new InvalidTypeConversionException(); }
00552 Variant BitColumn::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00553
00554 #if defined(DEBUG)
00555 void BitColumn::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00556 void BitColumn::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00557 #endif
00558
00559 TimeStampColumn::TimeStampColumn(const String& name)
00560 : IColumn(name, sizeof(DateTime)), m_data()
00561 {
00562 }
00563
00564 TimeStampColumn::~TimeStampColumn() { }
00565
00566 int TimeStampColumn::Count() const { return m_data.Count(); }
00567 int TimeStampColumn::Type() const { return DbSqlType::SQL_TYPE_DATETIME; }
00568
00569 IColumn *TimeStampColumn::Clone() const
00570 {
00571 TimeStampColumn *col = new TimeStampColumn(m_name.GetChars());
00572 col->m_data = m_data;
00573 return col;
00574 }
00575
00576 void TimeStampColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00577 void TimeStampColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00578 void TimeStampColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00579 void TimeStampColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00580 void TimeStampColumn::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00581 void TimeStampColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00582 void TimeStampColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00583 void TimeStampColumn::Append( bool i ) { throw new InvalidTypeConversionException(); }
00584 void TimeStampColumn::Append( DateTime i ) { m_data.Add( i ); }
00585 void TimeStampColumn::Append( Date i ) { throw new InvalidTypeConversionException(); }
00586 void TimeStampColumn::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00587 void TimeStampColumn::AppendParse( const char *data, const int len) { m_data.Add( DateTime::Parse(data) ); }
00588 void TimeStampColumn::Append( void *data, int len )
00589 {
00590 #if defined(HAVE_SQLFRONT_H) && defined(HAVE_SQLDB_H)
00591
00592 ASSERT(len == sizeof(DBDATETIME));
00593 time_t ret;
00594 struct tm t;
00595 DBDATEREC rec;
00596 DBDATETIME *dtm = (DBDATETIME *)data;
00597 dbdatecrack( NULL, &rec, dtm );
00598
00599 memset( &t, 0, sizeof(t) );
00600 t.tm_hour = rec.hour;
00601 t.tm_mday = rec.month;
00602 t.tm_min = rec.minute;
00603 t.tm_mon = rec.month - 1;
00604 t.tm_sec = rec.second;
00605
00606
00607 t.tm_year = rec.year - 1900;
00608
00609 ret = mktime( &t );
00610 if ( ret < 0 )
00611 {
00612 throw SqlException("Invalid date time");
00613 }
00614 Append(DateTime(ret));
00615
00616 #else
00617 throw NotImplementedException();
00618 #endif
00619 }
00620 void TimeStampColumn::Append( IColumn *col, const int row ) { Append(col->GetDateTime(row)); }
00621 void TimeStampColumn::AppendNull() { Append(0); }
00622
00623 int8 TimeStampColumn::GetByte(const int row) { throw new InvalidTypeConversionException(); }
00624 int16 TimeStampColumn::GetInt16(const int row) { throw new InvalidTypeConversionException(); }
00625 int32 TimeStampColumn::GetInt32(const int row) { throw new InvalidTypeConversionException(); }
00626 int64 TimeStampColumn::GetInt64(const int row) { throw new InvalidTypeConversionException(); }
00627 Decimal TimeStampColumn::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00628 float32 TimeStampColumn::GetFloat32(const int row) { throw new InvalidTypeConversionException(); }
00629 float64 TimeStampColumn::GetFloat64(const int row) { throw new InvalidTypeConversionException(); }
00630 bool TimeStampColumn::GetBit(const int row) { throw new InvalidTypeConversionException(); }
00631 DateTime TimeStampColumn::GetTimeStamp(const int row) { return m_data.ElementAt(row); }
00632 Date TimeStampColumn::GetDate(const int row) { return m_data.ElementAt(row).DatePart(); }
00633 DateTime TimeStampColumn::GetDateTime(const int row) { return m_data.ElementAt(row); }
00634 StringPtr TimeStampColumn::GetChar(const int row) { throw new InvalidTypeConversionException(); }
00635 StringPtr TimeStampColumn::GetVarchar(const int row) { throw new InvalidTypeConversionException(); }
00636 Variant TimeStampColumn::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00637
00638 #if defined(DEBUG)
00639 void TimeStampColumn::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00640 void TimeStampColumn::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00641 #endif
00642
00643 DateColumn::DateColumn(const String& name)
00644 : IColumn(name, sizeof(Date)), m_data()
00645 {
00646 }
00647
00648 DateColumn::~DateColumn() { }
00649
00650 int DateColumn::Count() const { return m_data.Count(); }
00651 int DateColumn::Type() const { return DbSqlType::SQL_TYPE_DATE; }
00652
00653 IColumn *DateColumn::Clone() const
00654 {
00655 DateColumn *col = new DateColumn(m_name.GetChars());
00656 col->m_data = m_data;
00657 return col;
00658 }
00659
00660 void DateColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00661 void DateColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00662 void DateColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00663 void DateColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00664 void DateColumn::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00665 void DateColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00666 void DateColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00667 void DateColumn::Append( bool i ) { throw new InvalidTypeConversionException(); }
00668 void DateColumn::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00669 void DateColumn::Append( Date i ) { m_data.Add( i ); }
00670 void DateColumn::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00671 void DateColumn::AppendParse( const char *data, const int len) { m_data.Add( Date::Parse(data) ); }
00672 void DateColumn::Append( void *data, int len )
00673 {
00674 throw NotImplementedException("This append is intended for MSSQL, which doesn't support a DATE type");
00675 }
00676 void DateColumn::Append( IColumn *col, const int row ) { Append(col->GetDate(row)); }
00677 void DateColumn::AppendNull() { Append(0); }
00678
00679 int8 DateColumn::GetByte(const int row) { throw new InvalidTypeConversionException(); }
00680 int16 DateColumn::GetInt16(const int row) { throw new InvalidTypeConversionException(); }
00681 int32 DateColumn::GetInt32(const int row) { throw new InvalidTypeConversionException(); }
00682 int64 DateColumn::GetInt64(const int row) { throw new InvalidTypeConversionException(); }
00683 Decimal DateColumn::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00684 float32 DateColumn::GetFloat32(const int row) { throw new InvalidTypeConversionException(); }
00685 float64 DateColumn::GetFloat64(const int row) { throw new InvalidTypeConversionException(); }
00686 bool DateColumn::GetBit(const int row) { throw new InvalidTypeConversionException(); }
00687 DateTime DateColumn::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00688 Date DateColumn::GetDate(const int row) { return m_data.ElementAt(row); }
00689 DateTime DateColumn::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00690 StringPtr DateColumn::GetChar(const int row) { return m_data.ElementAt(row).ToString(); }
00691 StringPtr DateColumn::GetVarchar(const int row) { return m_data.ElementAt(row).ToString(); }
00692 Variant DateColumn::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00693
00694 #if defined(DEBUG)
00695 void DateColumn::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00696 void DateColumn::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00697 #endif
00698
00699 DateTimeColumn::DateTimeColumn(const String& name)
00700 : IColumn(name, sizeof(DateTime)), m_data()
00701 {
00702 }
00703
00704 DateTimeColumn::~DateTimeColumn() { }
00705
00706 int DateTimeColumn::Count() const { return m_data.Count(); }
00707 int DateTimeColumn::Type() const { return DbSqlType::SQL_TYPE_DATETIME; }
00708
00709 IColumn *DateTimeColumn::Clone() const
00710 {
00711 DateTimeColumn *col = new DateTimeColumn(m_name.GetChars());
00712 col->m_data = m_data;
00713 return col;
00714 }
00715
00716 void DateTimeColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00717 void DateTimeColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00718 void DateTimeColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00719 void DateTimeColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00720 void DateTimeColumn::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00721 void DateTimeColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00722 void DateTimeColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00723 void DateTimeColumn::Append( bool i ) { throw new InvalidTypeConversionException(); }
00724 void DateTimeColumn::Append( DateTime i ) { m_data.Add( i ); }
00725 void DateTimeColumn::Append( Date i ) { throw new InvalidTypeConversionException(); }
00726 void DateTimeColumn::Append( const String& str ) { throw new InvalidTypeConversionException(); }
00727 void DateTimeColumn::AppendParse( const char *data, const int len) { m_data.Add( DateTime::Parse(data) ); }
00728 void DateTimeColumn::Append( void *data, int len )
00729 {
00730 #if defined(HAVE_SQLFRONT_H) && defined(HAVE_SQLDB_H)
00731
00732 ASSERT(len == sizeof(DBDATETIME));
00733 time_t ret;
00734 struct tm t;
00735 DBDATEREC rec;
00736 DBDATETIME *dtm = (DBDATETIME *)data;
00737 dbdatecrack( NULL, &rec, dtm );
00738
00739 memset( &t, 0, sizeof(t) );
00740 t.tm_hour = rec.hour;
00741 t.tm_mday = rec.month;
00742 t.tm_min = rec.minute;
00743 t.tm_mon = rec.month - 1;
00744 t.tm_sec = rec.second;
00745
00746
00747 t.tm_year = rec.year - 1900;
00748
00749 ret = mktime( &t );
00750 if ( ret < 0 )
00751 {
00752 throw SqlException("Invalid date time");
00753 }
00754 Append(DateTime(ret));
00755
00756 #else
00757 throw NotImplementedException();
00758 #endif
00759 }
00760 void DateTimeColumn::Append( IColumn *col, const int row ) { Append(col->GetDateTime(row)); }
00761 void DateTimeColumn::AppendNull() { Append(0); }
00762
00763 int8 DateTimeColumn::GetByte(const int row) { throw new InvalidTypeConversionException(); }
00764 int16 DateTimeColumn::GetInt16(const int row) { throw new InvalidTypeConversionException(); }
00765 int32 DateTimeColumn::GetInt32(const int row) { throw new InvalidTypeConversionException(); }
00766 int64 DateTimeColumn::GetInt64(const int row) { throw new InvalidTypeConversionException(); }
00767 Decimal DateTimeColumn::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00768 float32 DateTimeColumn::GetFloat32(const int row) { throw new InvalidTypeConversionException(); }
00769 float64 DateTimeColumn::GetFloat64(const int row) { throw new InvalidTypeConversionException(); }
00770 bool DateTimeColumn::GetBit(const int row) { throw new InvalidTypeConversionException(); }
00771 DateTime DateTimeColumn::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00772 Date DateTimeColumn::GetDate(const int row) { return m_data.ElementAt(row).DatePart(); }
00773 DateTime DateTimeColumn::GetDateTime(const int row) { return m_data.ElementAt(row); }
00774 StringPtr DateTimeColumn::GetChar(const int row) { return m_data.ElementAt(row).ToString(); }
00775 StringPtr DateTimeColumn::GetVarchar(const int row) { return m_data.ElementAt(row).ToString(); }
00776 Variant DateTimeColumn::GetVariant(const int row) { return Variant(m_data.ElementAt(row)); }
00777
00778 #if defined(DEBUG)
00779 void DateTimeColumn::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00780 void DateTimeColumn::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00781 #endif
00782
00783 CharColumn::CharColumn(const String& name, const int maxlen)
00784 : IColumn(name, maxlen), m_data()
00785 {
00786 }
00787
00788 CharColumn::~CharColumn() { }
00789
00790 int CharColumn::Count() const { return m_data.Count(); }
00791 int CharColumn::Type() const { return DbSqlType::SQL_TYPE_CHAR; }
00792
00793 IColumn *CharColumn::Clone() const
00794 {
00795 CharColumn *col = new CharColumn(m_name.GetChars(), m_maxlen);
00796 col->m_data = m_data;
00797 return col;
00798 }
00799
00800 void CharColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00801 void CharColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00802 void CharColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00803 void CharColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00804 void CharColumn::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00805 void CharColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00806 void CharColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00807 void CharColumn::Append( bool i ) { throw new InvalidTypeConversionException(); }
00808 void CharColumn::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00809 void CharColumn::Append( Date i ) { throw new InvalidTypeConversionException(); }
00810 void CharColumn::Append( const String& str )
00811 {
00812 struct chars255 data;
00813 if ( str.Length() >= 255 )
00814 {
00815 throw new IndexOutOfBoundsException();
00816 }
00817 strcpy(data.chars, str.GetChars());
00818 m_data.Add(data);
00819 }
00820 void CharColumn::AppendParse( const char *data, const int len) { Append(String(data, len)); }
00821 void CharColumn::Append( void *data, int len )
00822 {
00823 Append( String((char *)data, len) );
00824 }
00825 void CharColumn::Append( IColumn *col, const int row ) { Append(col->GetChar(row)->CharAt(0)); }
00826 void CharColumn::AppendNull() { Append(0); }
00827
00828 int8 CharColumn::GetByte(const int row) { throw new InvalidTypeConversionException(); }
00829 int16 CharColumn::GetInt16(const int row) { throw new InvalidTypeConversionException(); }
00830 int32 CharColumn::GetInt32(const int row) { throw new InvalidTypeConversionException(); }
00831 int64 CharColumn::GetInt64(const int row) { throw new InvalidTypeConversionException(); }
00832 Decimal CharColumn::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00833 float32 CharColumn::GetFloat32(const int row) { throw new InvalidTypeConversionException(); }
00834 float64 CharColumn::GetFloat64(const int row) { throw new InvalidTypeConversionException(); }
00835 bool CharColumn::GetBit(const int row) { throw new InvalidTypeConversionException(); }
00836 DateTime CharColumn::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00837 Date CharColumn::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00838 DateTime CharColumn::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00839 StringPtr CharColumn::GetChar(const int row) { return StringPtr(new String(m_data.ElementAt(row).chars)); }
00840 StringPtr CharColumn::GetVarchar(const int row) { return GetChar(row); }
00841 Variant CharColumn::GetVariant(const int row) { return Variant(m_data.ElementAt(row).chars); }
00842
00843 #if defined(DEBUG)
00844 void CharColumn::CheckMem() const { IColumn::CheckMem(); m_data.CheckMem(); }
00845 void CharColumn::ValidateMem() const { IColumn::ValidateMem(); m_data.ValidateMem(); }
00846 #endif
00847
00848 VarCharColumn::VarCharColumn(const String& name, const int maxlen)
00849 : IColumn(name, maxlen)
00850 {
00851 }
00852
00853 VarCharColumn::~VarCharColumn()
00854 {
00855 }
00856
00857 int VarCharColumn::Count() const { return m_data.Count(); }
00858 int VarCharColumn::Type() const { return DbSqlType::SQL_TYPE_CHAR; }
00859
00860 IColumn *VarCharColumn::Clone() const
00861 {
00862 VarCharColumn *col = new VarCharColumn(m_name.GetChars(), m_maxlen);
00863 int count = m_data.Count();
00864 for ( int x = 0; x < count; x++ )
00865 {
00866 col->m_data.Add( StringPtr(new String(*m_data.ElementAt(x))) );
00867 }
00868 return col;
00869 }
00870
00871 void VarCharColumn::Append( int8 i ) { throw new InvalidTypeConversionException(); }
00872 void VarCharColumn::Append( int16 i ) { throw new InvalidTypeConversionException(); }
00873 void VarCharColumn::Append( int32 i ) { throw new InvalidTypeConversionException(); }
00874 void VarCharColumn::Append( int64 i ) { throw new InvalidTypeConversionException(); }
00875 void VarCharColumn::Append( Decimal i ) { throw new InvalidTypeConversionException(); }
00876 void VarCharColumn::Append( float32 i ) { throw new InvalidTypeConversionException(); }
00877 void VarCharColumn::Append( float64 i ) { throw new InvalidTypeConversionException(); }
00878 void VarCharColumn::Append( bool i ) { throw new InvalidTypeConversionException(); }
00879 void VarCharColumn::Append( DateTime i ) { throw new InvalidTypeConversionException(); }
00880 void VarCharColumn::Append( Date i ) { throw new InvalidTypeConversionException(); }
00881 void VarCharColumn::Append( const String& str ) { m_data.Add(StringPtr(new String(str))); }
00882 void VarCharColumn::AppendParse( const char *data, const int len) { m_data.Add(StringPtr(new String(data))); }
00883 void VarCharColumn::Append( void *data, int len )
00884 {
00885 Append( String((char *)data, len) );
00886 }
00887 void VarCharColumn::Append( IColumn *col, const int row ) { Append(col->GetVarchar(row)->CharAt(0)); }
00888 void VarCharColumn::AppendNull() { Append(0); }
00889
00890 int8 VarCharColumn::GetByte(const int row) { throw new InvalidTypeConversionException(); }
00891 int16 VarCharColumn::GetInt16(const int row) { throw new InvalidTypeConversionException(); }
00892 int32 VarCharColumn::GetInt32(const int row) { throw new InvalidTypeConversionException(); }
00893 int64 VarCharColumn::GetInt64(const int row) { throw new InvalidTypeConversionException(); }
00894 Decimal VarCharColumn::GetDecimal(const int row) { throw new InvalidTypeConversionException(); }
00895 float32 VarCharColumn::GetFloat32(const int row) { throw new InvalidTypeConversionException(); }
00896 float64 VarCharColumn::GetFloat64(const int row) { throw new InvalidTypeConversionException(); }
00897 bool VarCharColumn::GetBit(const int row) { throw new InvalidTypeConversionException(); }
00898 DateTime VarCharColumn::GetTimeStamp(const int row) { throw new InvalidTypeConversionException(); }
00899 Date VarCharColumn::GetDate(const int row) { throw new InvalidTypeConversionException(); }
00900 DateTime VarCharColumn::GetDateTime(const int row) { throw new InvalidTypeConversionException(); }
00901 StringPtr VarCharColumn::GetChar(const int row) { return m_data.ElementAt(row); }
00902 StringPtr VarCharColumn::GetVarchar(const int row) { return m_data.ElementAt(row); }
00903 Variant VarCharColumn::GetVariant(const int row) { return Variant(*m_data.ElementAt(row)); }
00904
00905 #if defined(DEBUG)
00906 void VarCharColumn::CheckMem() const
00907 {
00908 IColumn::CheckMem();
00909 m_data.CheckMem();
00910 int count = m_data.Count();
00911 for ( int x = 0; x < m_data.Count(); x++ )
00912 {
00913 m_data.ElementAt(x).CheckMem();
00914 }
00915 }
00916
00917 void VarCharColumn::ValidateMem() const
00918 {
00919 IColumn::ValidateMem();
00920 m_data.ValidateMem();
00921 int count = m_data.Count();
00922 for ( int x = 0; x < m_data.Count(); x++ )
00923 {
00924 m_data.ElementAt(x).ValidateMem();
00925 }
00926 }
00927 #endif