diff options
author | EuAndreh <eu@euandre.org> | 2024-08-12 15:42:56 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-08-12 15:52:16 -0300 |
commit | 6bbc33b9e998af7ee45cca86e1290474603dff48 (patch) | |
tree | 5d0aff47783bc20dcf3f7862afdba0445e4c2fae /sqlite3_type.go | |
parent | Add Makefile and build skeleton (diff) | |
download | golite-6bbc33b9e998af7ee45cca86e1290474603dff48.tar.gz golite-6bbc33b9e998af7ee45cca86e1290474603dff48.tar.xz |
Build with "go tool" and hackishly bundle code from same package into one file each
Diffstat (limited to 'sqlite3_type.go')
-rw-r--r-- | sqlite3_type.go | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/sqlite3_type.go b/sqlite3_type.go deleted file mode 100644 index 20537a0..0000000 --- a/sqlite3_type.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. -// Use of this source code is governed by an MIT-style -// license that can be found in the LICENSE file. - -package sqlite3 - -/* -#ifndef USE_LIBSQLITE3 -#include "sqlite3-binding.h" -#else -#include <sqlite3.h> -#endif -*/ -import "C" -import ( - "database/sql" - "reflect" - "strings" -) - -// 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 { - //ct := C.sqlite3_column_type(rc.s.s, C.int(i)) // Always returns 5 - return scanType(C.GoString(C.sqlite3_column_decltype(rc.s.s, C.int(i)))) -} - -const ( - SQLITE_INTEGER = iota - SQLITE_TEXT - SQLITE_BLOB - SQLITE_REAL - SQLITE_NUMERIC - SQLITE_TIME - SQLITE_BOOL - SQLITE_NULL -) - -func scanType(cdt string) reflect.Type { - t := strings.ToUpper(cdt) - i := databaseTypeConvSqlite(t) - switch i { - case SQLITE_INTEGER: - return reflect.TypeOf(sql.NullInt64{}) - case SQLITE_TEXT: - return reflect.TypeOf(sql.NullString{}) - case SQLITE_BLOB: - return reflect.TypeOf(sql.RawBytes{}) - case SQLITE_REAL: - return reflect.TypeOf(sql.NullFloat64{}) - case SQLITE_NUMERIC: - return reflect.TypeOf(sql.NullFloat64{}) - case SQLITE_BOOL: - return reflect.TypeOf(sql.NullBool{}) - case SQLITE_TIME: - return reflect.TypeOf(sql.NullTime{}) - } - return reflect.TypeOf(new(any)) -} - -func databaseTypeConvSqlite(t string) int { - if strings.Contains(t, "INT") { - return SQLITE_INTEGER - } - if t == "CLOB" || t == "TEXT" || - strings.Contains(t, "CHAR") { - return SQLITE_TEXT - } - if t == "BLOB" { - return SQLITE_BLOB - } - if t == "REAL" || t == "FLOAT" || - strings.Contains(t, "DOUBLE") { - return SQLITE_REAL - } - if t == "DATE" || t == "DATETIME" || - t == "TIMESTAMP" { - return SQLITE_TIME - } - if t == "NUMERIC" || - strings.Contains(t, "DECIMAL") { - return SQLITE_NUMERIC - } - if t == "BOOLEAN" { - return SQLITE_BOOL - } - - return SQLITE_NULL -} |