func()

in phoenix/phoenix.go [39:116]


func (a Adapter) GetColumnTypeDefinition(col *message.ColumnMetaData) *internal.Column {

	column := &internal.Column{
		Name:     col.GetColumnName(),
		TypeName: col.GetType().GetName(),
		Nullable: col.GetNullable() != 0,
	}

	// Handle precision and length
	switch col.GetType().GetName() {
	case "DECIMAL":

		precision := int64(col.GetPrecision())

		if precision == 0 {
			precision = math.MaxInt64
		}

		scale := int64(col.GetScale())

		if scale == 0 {
			scale = math.MaxInt64
		}

		column.PrecisionScale = &internal.PrecisionScale{
			Precision: precision,
			Scale:     scale,
		}
	case "VARCHAR", "CHAR", "BINARY":
		column.Length = int64(col.GetPrecision())
	case "VARBINARY":
		column.Length = math.MaxInt64
	}

	// Handle scan types
	switch col.GetType().GetName() {
	case "INTEGER", "UNSIGNED_INT", "BIGINT", "UNSIGNED_LONG", "TINYINT", "UNSIGNED_TINYINT", "SMALLINT", "UNSIGNED_SMALLINT":
		column.ScanType = reflect.TypeOf(int64(0))

	case "FLOAT", "UNSIGNED_FLOAT", "DOUBLE", "UNSIGNED_DOUBLE":
		column.ScanType = reflect.TypeOf(float64(0))

	case "DECIMAL", "VARCHAR", "CHAR":
		column.ScanType = reflect.TypeOf("")

	case "BOOLEAN":
		column.ScanType = reflect.TypeOf(false)

	case "TIME", "DATE", "TIMESTAMP", "UNSIGNED_TIME", "UNSIGNED_DATE", "UNSIGNED_TIMESTAMP":
		column.ScanType = reflect.TypeOf(time.Time{})

	case "BINARY", "VARBINARY":
		column.ScanType = reflect.TypeOf([]byte{})

	default:
		column.ScanType = reflect.TypeOf(new(interface{})).Elem()
	}

	// Handle rep type special cases for decimals, floats, date, time and timestamp
	switch col.GetType().GetName() {
	case "DECIMAL":
		column.Rep = message.Rep_BIG_DECIMAL
	case "FLOAT":
		column.Rep = message.Rep_FLOAT
	case "UNSIGNED_FLOAT":
		column.Rep = message.Rep_FLOAT
	case "TIME", "UNSIGNED_TIME":
		column.Rep = message.Rep_JAVA_SQL_TIME
	case "DATE", "UNSIGNED_DATE":
		column.Rep = message.Rep_JAVA_SQL_DATE
	case "TIMESTAMP", "UNSIGNED_TIMESTAMP":
		column.Rep = message.Rep_JAVA_SQL_TIMESTAMP
	default:
		column.Rep = col.GetType().GetRep()
	}

	return column
}