| 148 | } |
| 149 | |
| 150 | void SQLiteSource::insertValue(IColumn & column, ExternalResultDescription::ValueType type, int idx, const IDataType & data_type) |
| 151 | { |
| 152 | switch (type) |
| 153 | { |
| 154 | case ValueType::vtUInt8: |
| 155 | assert_cast<ColumnUInt8 &>(column).insertValue(static_cast<UInt8>(sqlite3_column_int(compiled_statement.get(), idx))); |
| 156 | break; |
| 157 | case ValueType::vtUInt16: |
| 158 | assert_cast<ColumnUInt16 &>(column).insertValue(static_cast<UInt16>(sqlite3_column_int(compiled_statement.get(), idx))); |
| 159 | break; |
| 160 | case ValueType::vtUInt32: |
| 161 | assert_cast<ColumnUInt32 &>(column).insertValue(static_cast<UInt32>(sqlite3_column_int64(compiled_statement.get(), idx))); |
| 162 | break; |
| 163 | case ValueType::vtUInt64: |
| 164 | /// There is no uint64 in sqlite3, only int and int64 |
| 165 | assert_cast<ColumnUInt64 &>(column).insertValue(sqlite3_column_int64(compiled_statement.get(), idx)); |
| 166 | break; |
| 167 | case ValueType::vtInt8: |
| 168 | assert_cast<ColumnInt8 &>(column).insertValue(static_cast<Int8>(sqlite3_column_int(compiled_statement.get(), idx))); |
| 169 | break; |
| 170 | case ValueType::vtInt16: |
| 171 | assert_cast<ColumnInt16 &>(column).insertValue(static_cast<Int16>(sqlite3_column_int(compiled_statement.get(), idx))); |
| 172 | break; |
| 173 | case ValueType::vtInt32: |
| 174 | assert_cast<ColumnInt32 &>(column).insertValue(sqlite3_column_int(compiled_statement.get(), idx)); |
| 175 | break; |
| 176 | case ValueType::vtInt64: |
| 177 | assert_cast<ColumnInt64 &>(column).insertValue(sqlite3_column_int64(compiled_statement.get(), idx)); |
| 178 | break; |
| 179 | case ValueType::vtFloat32: |
| 180 | assert_cast<ColumnFloat32 &>(column).insertValue(static_cast<Float32>(sqlite3_column_double(compiled_statement.get(), idx))); |
| 181 | break; |
| 182 | case ValueType::vtFloat64: |
| 183 | assert_cast<ColumnFloat64 &>(column).insertValue(sqlite3_column_double(compiled_statement.get(), idx)); |
| 184 | break; |
| 185 | case ValueType::vtEnum8: |
| 186 | { |
| 187 | const char * data = reinterpret_cast<const char *>(sqlite3_column_text(compiled_statement.get(), idx)); |
| 188 | assert_cast<ColumnInt8 &>(column).insertValue( |
| 189 | static_cast<Int8>(assert_cast<const DataTypeEnum<Int8> &>(data_type).castToValue(data).safeGet<Int8>())); |
| 190 | break; |
| 191 | } |
| 192 | case ValueType::vtEnum16: |
| 193 | { |
| 194 | const char * data = reinterpret_cast<const char *>(sqlite3_column_text(compiled_statement.get(), idx)); |
| 195 | assert_cast<ColumnInt16 &>(column).insertValue( |
| 196 | static_cast<Int16>(assert_cast<const DataTypeEnum<Int16> &>(data_type).castToValue(data).safeGet<Int16>())); |
| 197 | break; |
| 198 | } |
| 199 | case ValueType::vtString: |
| 200 | { |
| 201 | const char * data = reinterpret_cast<const char *>(sqlite3_column_text(compiled_statement.get(), idx)); |
| 202 | int len = sqlite3_column_bytes(compiled_statement.get(), idx); |
| 203 | assert_cast<ColumnString &>(column).insertData(data, len); |
| 204 | break; |
| 205 | } |
| 206 | case ValueType::vtDate: |
| 207 | { |