geektutu/7days-golang · error

invalid sql type %s (%s)

Error message

invalid sql type %s (%s)

What it means

Panicked type-mapping failure in sqlite3 dialect DataTypeOf: the schema field's reflect.Kind has no SQLite column-type mapping in the switch (e.g. map, chan, func, pointer, complex). It fires during table migration when a struct field uses an unsupported Go type.

Source

Thrown at gee-orm/day6-transaction/dialect/sqlite3.go:38

	case reflect.Bool:
		return "bool"
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,
		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr:
		return "integer"
	case reflect.Int64, reflect.Uint64:
		return "bigint"
	case reflect.Float32, reflect.Float64:
		return "real"
	case reflect.String:
		return "text"
	case reflect.Array, reflect.Slice:
		return "blob"
	case reflect.Struct:
		if _, ok := typ.Interface().(time.Time); ok {
			return "datetime"
		}
	}
	panic(fmt.Sprintf("invalid sql type %s (%s)", typ.Type().Name(), typ.Kind()))
}

// TableExistSQL returns SQL that judge whether the table exists in database
func (s *sqlite3) TableExistSQL(tableName string) (string, []interface{}) {
	args := []interface{}{tableName}
	return "SELECT name FROM sqlite_master WHERE type='table' and name = ?", args
}

View on GitHub (pinned to cf36443821)

Solutions

  1. Change the struct field to a supported type: bool, integer, float, string, time.Time, or slice/array (blob).
  2. Add a case to DataTypeOf for the kind you need (e.g. return "text" for pointers/JSON-serializable types).
  3. Exclude unsupported fields from the schema before migration.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at gee-orm/day6-transaction/dialect/sqlite3.go:38 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of geektutu/7days-golang@cf36443821 (2026-09-03). Data as JSON: /api/errors/5cfbbc11e8c7817c. Report an issue: GitHub.