(t *testing.T)
| 7 | ) |
| 8 | |
| 9 | func TestCompileQuery(t *testing.T) { |
| 10 | table := []struct { |
| 11 | Q, R, D, T, N string |
| 12 | V []string |
| 13 | }{ |
| 14 | // basic test for named parameters, invalid char ',' terminating |
| 15 | { |
| 16 | Q: `INSERT INTO foo (a,b,c,d) VALUES (:name, :age, :first, :last)`, |
| 17 | R: `INSERT INTO foo (a,b,c,d) VALUES (?, ?, ?, ?)`, |
| 18 | D: `INSERT INTO foo (a,b,c,d) VALUES ($1, $2, $3, $4)`, |
| 19 | T: `INSERT INTO foo (a,b,c,d) VALUES (@p1, @p2, @p3, @p4)`, |
| 20 | N: `INSERT INTO foo (a,b,c,d) VALUES (:name, :age, :first, :last)`, |
| 21 | V: []string{"name", "age", "first", "last"}, |
| 22 | }, |
| 23 | // This query tests a named parameter ending the string as well as numbers |
| 24 | { |
| 25 | Q: `SELECT * FROM a WHERE first_name=:name1 AND last_name=:name2`, |
| 26 | R: `SELECT * FROM a WHERE first_name=? AND last_name=?`, |
| 27 | D: `SELECT * FROM a WHERE first_name=$1 AND last_name=$2`, |
| 28 | T: `SELECT * FROM a WHERE first_name=@p1 AND last_name=@p2`, |
| 29 | N: `SELECT * FROM a WHERE first_name=:name1 AND last_name=:name2`, |
| 30 | V: []string{"name1", "name2"}, |
| 31 | }, |
| 32 | { |
| 33 | Q: `SELECT "::foo" FROM a WHERE first_name=:name1 AND last_name=:name2`, |
| 34 | R: `SELECT ":foo" FROM a WHERE first_name=? AND last_name=?`, |
| 35 | D: `SELECT ":foo" FROM a WHERE first_name=$1 AND last_name=$2`, |
| 36 | T: `SELECT ":foo" FROM a WHERE first_name=@p1 AND last_name=@p2`, |
| 37 | N: `SELECT ":foo" FROM a WHERE first_name=:name1 AND last_name=:name2`, |
| 38 | V: []string{"name1", "name2"}, |
| 39 | }, |
| 40 | { |
| 41 | Q: `SELECT 'a::b::c' || first_name, '::::ABC::_::' FROM person WHERE first_name=:first_name AND last_name=:last_name`, |
| 42 | R: `SELECT 'a:b:c' || first_name, '::ABC:_:' FROM person WHERE first_name=? AND last_name=?`, |
| 43 | D: `SELECT 'a:b:c' || first_name, '::ABC:_:' FROM person WHERE first_name=$1 AND last_name=$2`, |
| 44 | T: `SELECT 'a:b:c' || first_name, '::ABC:_:' FROM person WHERE first_name=@p1 AND last_name=@p2`, |
| 45 | N: `SELECT 'a:b:c' || first_name, '::ABC:_:' FROM person WHERE first_name=:first_name AND last_name=:last_name`, |
| 46 | V: []string{"first_name", "last_name"}, |
| 47 | }, |
| 48 | { |
| 49 | Q: `SELECT @name := "name", :age, :first, :last`, |
| 50 | R: `SELECT @name := "name", ?, ?, ?`, |
| 51 | D: `SELECT @name := "name", $1, $2, $3`, |
| 52 | N: `SELECT @name := "name", :age, :first, :last`, |
| 53 | T: `SELECT @name := "name", @p1, @p2, @p3`, |
| 54 | V: []string{"age", "first", "last"}, |
| 55 | }, |
| 56 | /* This unicode awareness test sadly fails, because of our byte-wise worldview. |
| 57 | * We could certainly iterate by Rune instead, though it's a great deal slower, |
| 58 | * it's probably the RightWay(tm) |
| 59 | { |
| 60 | Q: `INSERT INTO foo (a,b,c,d) VALUES (:あ, :b, :キコ, :名前)`, |
| 61 | R: `INSERT INTO foo (a,b,c,d) VALUES (?, ?, ?, ?)`, |
| 62 | D: `INSERT INTO foo (a,b,c,d) VALUES ($1, $2, $3, $4)`, |
| 63 | N: []string{"name", "age", "first", "last"}, |
| 64 | }, |
| 65 | */ |
| 66 | } |
nothing calls this directly
no test coverage detected