Skip to content

Commit b91063b

Browse files
committed
fix
1 parent b4bb74c commit b91063b

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

ormlite.go

+16-6
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,14 @@ func queryWithOptions(ctx context.Context, db *sql.DB, table string, columns []s
266266
values = append(values, value.Index(i).Interface())
267267
}
268268
case reflect.String:
269-
keys = append(keys, fmt.Sprintf("%s like ?", k))
270-
values = append(values, fmt.Sprintf("%%%s%%", v))
269+
switch v.(type) {
270+
case StrictString:
271+
keys = append(keys, fmt.Sprintf("%s = ?", k))
272+
values = append(values, v)
273+
default:
274+
keys = append(keys, fmt.Sprintf("%s like ?", k))
275+
values = append(values, fmt.Sprintf("%%%s%%", v))
276+
}
271277
default:
272278
switch v.(type) {
273279
case Greater:
@@ -285,8 +291,6 @@ func queryWithOptions(ctx context.Context, db *sql.DB, table string, columns []s
285291
case BitwiseANDStrict:
286292
keys = append(keys, fmt.Sprintf("%s&? = ?", k))
287293
values = append(values, v)
288-
case StrictString:
289-
keys = append(keys, fmt.Sprintf("%s = ?", k))
290294
default:
291295
keys = append(keys, fmt.Sprintf("%s = ?", k))
292296
}
@@ -1030,8 +1034,14 @@ func Count(db *sql.DB, m Model, opts *Options) (count int64, err error) {
10301034
args = append(args, value.Index(i).Interface())
10311035
}
10321036
case reflect.String:
1033-
query.WriteString(f + " like ?" + divider)
1034-
args = append(args, fmt.Sprintf("%%%s%%", v))
1037+
switch v.(type) {
1038+
case StrictString:
1039+
query.WriteString(f + " = ?" + divider)
1040+
args = append(args, v)
1041+
default:
1042+
query.WriteString(f + " like ?" + divider)
1043+
args = append(args, fmt.Sprintf("%%%s%%", v))
1044+
}
10351045
default:
10361046
switch v.(type) {
10371047
case Greater:

ormlite_test.go

+39
Original file line numberDiff line numberDiff line change
@@ -1166,3 +1166,42 @@ func TestBitwiseQuerying(t *testing.T) {
11661166
assert.EqualValues(t, 1, count)
11671167
}
11681168
}
1169+
1170+
type testStrictStringQueryingModel struct {
1171+
ID int64 `ormlite:"primary"`
1172+
Name string
1173+
}
1174+
1175+
func (*testStrictStringQueryingModel) Table() string { return "test" }
1176+
1177+
func TestStrictStringQuering(t *testing.T) {
1178+
db, err := sql.Open("sqlite3", ":memory:?_fk=1")
1179+
require.NoError(t, err)
1180+
1181+
_, err = db.Exec(`
1182+
create table test(id integer primary key, name text);
1183+
insert into test(name) values ('support');
1184+
insert into test(name) values ('subsupport');
1185+
`)
1186+
require.NoError(t, err)
1187+
1188+
var m testStrictStringQueryingModel
1189+
if assert.NoError(t, QueryStruct(db, &Options{Where: Where{"name": "support"}}, &m)) {
1190+
assert.EqualValues(t, "subsupport", m.Name)
1191+
}
1192+
1193+
var m1 testStrictStringQueryingModel
1194+
if assert.NoError(t, QueryStruct(db, &Options{Where: Where{"name": StrictString("support")}}, &m1)) {
1195+
assert.EqualValues(t, "support", m1.Name)
1196+
}
1197+
1198+
count, err := Count(db, &testStrictStringQueryingModel{}, &Options{Where: Where{"name": "support"}})
1199+
if assert.NoError(t, err) {
1200+
assert.EqualValues(t, 2, count)
1201+
}
1202+
1203+
count, err = Count(db, &testStrictStringQueryingModel{}, &Options{Where: Where{"name": StrictString("support")}})
1204+
if assert.NoError(t, err) {
1205+
assert.EqualValues(t, 1, count)
1206+
}
1207+
}

0 commit comments

Comments
 (0)