Skip to content

Commit d2a9a42

Browse files
committed
NullTime should be used with parseTime=true option
1 parent 970f888 commit d2a9a42

File tree

1 file changed

+101
-107
lines changed

1 file changed

+101
-107
lines changed

driver_test.go

+101-107
Original file line numberDiff line numberDiff line change
@@ -2844,131 +2844,125 @@ func TestRowsColumnTypes(t *testing.T) {
28442844
values2 = values2[:len(values2)-2]
28452845
values3 = values3[:len(values3)-2]
28462846

2847-
dsns := []string{
2848-
dsn + "&parseTime=true",
2849-
dsn + "&parseTime=false",
2850-
}
2851-
for _, testdsn := range dsns {
2852-
runTests(t, testdsn, func(dbt *DBTest) {
2853-
dbt.mustExec("CREATE TABLE test (" + schema + ")")
2854-
dbt.mustExec("INSERT INTO test VALUES (" + values1 + "), (" + values2 + "), (" + values3 + ")")
2847+
runTests(t, dsn+"&parseTime=true", func(dbt *DBTest) {
2848+
dbt.mustExec("CREATE TABLE test (" + schema + ")")
2849+
dbt.mustExec("INSERT INTO test VALUES (" + values1 + "), (" + values2 + "), (" + values3 + ")")
28552850

2856-
rows, err := dbt.db.Query("SELECT * FROM test")
2857-
if err != nil {
2858-
t.Fatalf("Query: %v", err)
2859-
}
2851+
rows, err := dbt.db.Query("SELECT * FROM test")
2852+
if err != nil {
2853+
t.Fatalf("Query: %v", err)
2854+
}
28602855

2861-
tt, err := rows.ColumnTypes()
2862-
if err != nil {
2863-
t.Fatalf("ColumnTypes: %v", err)
2864-
}
2856+
tt, err := rows.ColumnTypes()
2857+
if err != nil {
2858+
t.Fatalf("ColumnTypes: %v", err)
2859+
}
28652860

2866-
if len(tt) != len(columns) {
2867-
t.Fatalf("unexpected number of columns: expected %d, got %d", len(columns), len(tt))
2868-
}
2861+
if len(tt) != len(columns) {
2862+
t.Fatalf("unexpected number of columns: expected %d, got %d", len(columns), len(tt))
2863+
}
28692864

2870-
types := make([]reflect.Type, len(tt))
2871-
for i, tp := range tt {
2872-
column := columns[i]
2865+
types := make([]reflect.Type, len(tt))
2866+
for i, tp := range tt {
2867+
column := columns[i]
28732868

2874-
// Name
2875-
name := tp.Name()
2876-
if name != column.name {
2877-
t.Errorf("column name mismatch %s != %s", name, column.name)
2878-
continue
2879-
}
2869+
// Name
2870+
name := tp.Name()
2871+
if name != column.name {
2872+
t.Errorf("column name mismatch %s != %s", name, column.name)
2873+
continue
2874+
}
28802875

2881-
// DatabaseTypeName
2882-
databaseTypeName := tp.DatabaseTypeName()
2883-
if databaseTypeName != column.databaseTypeName {
2884-
t.Errorf("databasetypename name mismatch for column %q: %s != %s", name, databaseTypeName, column.databaseTypeName)
2885-
continue
2886-
}
2876+
// DatabaseTypeName
2877+
databaseTypeName := tp.DatabaseTypeName()
2878+
if databaseTypeName != column.databaseTypeName {
2879+
t.Errorf("databasetypename name mismatch for column %q: %s != %s", name, databaseTypeName, column.databaseTypeName)
2880+
continue
2881+
}
28872882

2888-
// ScanType
2889-
scanType := tp.ScanType()
2890-
if scanType != column.scanType {
2891-
if scanType == nil {
2892-
t.Errorf("scantype is null for column %q", name)
2893-
} else {
2894-
t.Errorf("scantype mismatch for column %q: %s != %s", name, scanType.Name(), column.scanType.Name())
2895-
}
2896-
continue
2883+
// ScanType
2884+
scanType := tp.ScanType()
2885+
if scanType != column.scanType {
2886+
if scanType == nil {
2887+
t.Errorf("scantype is null for column %q", name)
2888+
} else {
2889+
t.Errorf("scantype mismatch for column %q: %s != %s", name, scanType.Name(), column.scanType.Name())
28972890
}
2898-
types[i] = scanType
2899-
2900-
// Nullable
2901-
nullable, ok := tp.Nullable()
2891+
continue
2892+
}
2893+
types[i] = scanType
2894+
2895+
// Nullable
2896+
nullable, ok := tp.Nullable()
2897+
if !ok {
2898+
t.Errorf("nullable not ok %q", name)
2899+
continue
2900+
}
2901+
if nullable != column.nullable {
2902+
t.Errorf("nullable mismatch for column %q: %t != %t", name, nullable, column.nullable)
2903+
}
2904+
2905+
// Length
2906+
// length, ok := tp.Length()
2907+
// if length != column.length {
2908+
// if !ok {
2909+
// t.Errorf("length not ok for column %q", name)
2910+
// } else {
2911+
// t.Errorf("length mismatch for column %q: %d != %d", name, length, column.length)
2912+
// }
2913+
// continue
2914+
// }
2915+
2916+
// Precision and Scale
2917+
precision, scale, ok := tp.DecimalSize()
2918+
if precision != column.precision {
29022919
if !ok {
2903-
t.Errorf("nullable not ok %q", name)
2904-
continue
2905-
}
2906-
if nullable != column.nullable {
2907-
t.Errorf("nullable mismatch for column %q: %t != %t", name, nullable, column.nullable)
2920+
t.Errorf("precision not ok for column %q", name)
2921+
} else {
2922+
t.Errorf("precision mismatch for column %q: %d != %d", name, precision, column.precision)
29082923
}
2909-
2910-
// Length
2911-
// length, ok := tp.Length()
2912-
// if length != column.length {
2913-
// if !ok {
2914-
// t.Errorf("length not ok for column %q", name)
2915-
// } else {
2916-
// t.Errorf("length mismatch for column %q: %d != %d", name, length, column.length)
2917-
// }
2918-
// continue
2919-
// }
2920-
2921-
// Precision and Scale
2922-
precision, scale, ok := tp.DecimalSize()
2923-
if precision != column.precision {
2924-
if !ok {
2925-
t.Errorf("precision not ok for column %q", name)
2926-
} else {
2927-
t.Errorf("precision mismatch for column %q: %d != %d", name, precision, column.precision)
2928-
}
2929-
continue
2930-
}
2931-
if scale != column.scale {
2932-
if !ok {
2933-
t.Errorf("scale not ok for column %q", name)
2934-
} else {
2935-
t.Errorf("scale mismatch for column %q: %d != %d", name, scale, column.scale)
2936-
}
2937-
continue
2924+
continue
2925+
}
2926+
if scale != column.scale {
2927+
if !ok {
2928+
t.Errorf("scale not ok for column %q", name)
2929+
} else {
2930+
t.Errorf("scale mismatch for column %q: %d != %d", name, scale, column.scale)
29382931
}
2932+
continue
29392933
}
2934+
}
29402935

2941-
values := make([]interface{}, len(tt))
2942-
for i := range values {
2943-
values[i] = reflect.New(types[i]).Interface()
2936+
values := make([]interface{}, len(tt))
2937+
for i := range values {
2938+
values[i] = reflect.New(types[i]).Interface()
2939+
}
2940+
i := 0
2941+
for rows.Next() {
2942+
err = rows.Scan(values...)
2943+
if err != nil {
2944+
t.Fatalf("failed to scan values in %v", err)
29442945
}
2945-
i := 0
2946-
for rows.Next() {
2947-
err = rows.Scan(values...)
2948-
if err != nil {
2949-
t.Fatalf("failed to scan values in %v", err)
2950-
}
2951-
for j := range values {
2952-
value := reflect.ValueOf(values[j]).Elem().Interface()
2953-
if !reflect.DeepEqual(value, columns[j].valuesOut[i]) {
2954-
if columns[j].scanType == scanTypeRawBytes {
2955-
t.Errorf("row %d, column %d: %v != %v", i, j, string(value.(sql.RawBytes)), string(columns[j].valuesOut[i].(sql.RawBytes)))
2956-
} else {
2957-
t.Errorf("row %d, column %d: %v != %v", i, j, value, columns[j].valuesOut[i])
2958-
}
2946+
for j := range values {
2947+
value := reflect.ValueOf(values[j]).Elem().Interface()
2948+
if !reflect.DeepEqual(value, columns[j].valuesOut[i]) {
2949+
if columns[j].scanType == scanTypeRawBytes {
2950+
t.Errorf("row %d, column %d: %v != %v", i, j, string(value.(sql.RawBytes)), string(columns[j].valuesOut[i].(sql.RawBytes)))
2951+
} else {
2952+
t.Errorf("row %d, column %d: %v != %v", i, j, value, columns[j].valuesOut[i])
29592953
}
29602954
}
2961-
i++
2962-
}
2963-
if i != 3 {
2964-
t.Errorf("expected 3 rows, got %d", i)
29652955
}
2956+
i++
2957+
}
2958+
if i != 3 {
2959+
t.Errorf("expected 3 rows, got %d", i)
2960+
}
29662961

2967-
if err := rows.Close(); err != nil {
2968-
t.Errorf("error closing rows: %s", err)
2969-
}
2970-
})
2971-
}
2962+
if err := rows.Close(); err != nil {
2963+
t.Errorf("error closing rows: %s", err)
2964+
}
2965+
})
29722966
}
29732967

29742968
func TestValuerWithValueReceiverGivenNilValue(t *testing.T) {

0 commit comments

Comments
 (0)