diff options
author | Philip O'Toole <philip.otoole@yahoo.com> | 2017-06-17 12:02:47 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-17 12:02:47 -0700 |
commit | b951516ea086ff8c8a97eff7a59f2b95458b0a1c (patch) | |
tree | 035930342ee0510d83ab8ee47e4068bdc50247c3 /sqlite3_type.go | |
parent | Merge pull request #1 from mattn/master (diff) | |
parent | Merge pull request #425 from xxr3376/empty-bytes (diff) | |
download | golite-b951516ea086ff8c8a97eff7a59f2b95458b0a1c.tar.gz golite-b951516ea086ff8c8a97eff7a59f2b95458b0a1c.tar.xz |
Merge pull request #2 from mattn/master
Merge upstream
Diffstat (limited to 'sqlite3_type.go')
-rw-r--r-- | sqlite3_type.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/sqlite3_type.go b/sqlite3_type.go new file mode 100644 index 0000000..200d071 --- /dev/null +++ b/sqlite3_type.go @@ -0,0 +1,57 @@ +package sqlite3 + +/* +#ifndef USE_LIBSQLITE3 +#include <sqlite3-binding.h> +#else +#include <sqlite3.h> +#endif +*/ +import "C" +import ( + "reflect" + "time" +) + +// ColumnTypeDatabaseTypeName implement RowsColumnTypeDatabaseTypeName. +func (rc *SQLiteRows) ColumnTypeDatabaseTypeName(i int) string { + return C.GoString(C.sqlite3_column_decltype(rc.s.s, C.int(i))) +} + +/* +func (rc *SQLiteRows) ColumnTypeLength(index int) (length int64, ok bool) { + return 0, false +} + +func (rc *SQLiteRows) ColumnTypePrecisionScale(index int) (precision, scale int64, ok bool) { + return 0, 0, false +} +*/ + +// ColumnTypeNullable implement RowsColumnTypeNullable. +func (rc *SQLiteRows) ColumnTypeNullable(i int) (nullable, ok bool) { + return true, true +} + +// ColumnTypeScanType implement RowsColumnTypeScanType. +func (rc *SQLiteRows) ColumnTypeScanType(i int) reflect.Type { + switch C.sqlite3_column_type(rc.s.s, C.int(i)) { + case C.SQLITE_INTEGER: + switch C.GoString(C.sqlite3_column_decltype(rc.s.s, C.int(i))) { + case "timestamp", "datetime", "date": + return reflect.TypeOf(time.Time{}) + case "boolean": + return reflect.TypeOf(false) + } + return reflect.TypeOf(int64(0)) + case C.SQLITE_FLOAT: + return reflect.TypeOf(float64(0)) + case C.SQLITE_BLOB: + return reflect.SliceOf(reflect.TypeOf(byte(0))) + case C.SQLITE_NULL: + return reflect.TypeOf(nil) + case C.SQLITE_TEXT: + return reflect.TypeOf("") + } + return reflect.SliceOf(reflect.TypeOf(byte(0))) +} |