@@ -23,6 +23,113 @@ import (
2323// TestSelect covers SELECT syntax not covered by our MySQL select tests
2424func TestSelect (t * testing.T ) {
2525 RunScripts (t , []ScriptTest {
26+ {
27+ Name : "SELECT DISTINCT ON" ,
28+ SetUpScript : []string {
29+ "CREATE TABLE test (v1 INT4, v2 INT4);" ,
30+ "INSERT INTO test VALUES (1, 3), (1, 4), (2, 3), (2, 4);" ,
31+ "CREATE TABLE test2 (v1 INT4, v2 INT4, v3 INT4);" ,
32+ "INSERT INTO test2 VALUES (1, 3, 5), (2, 3, 5), (1, 4, 5), (2, 4, 5);" ,
33+ },
34+ Assertions : []ScriptTestAssertion {
35+ {
36+ Query : "SELECT * FROM test ORDER BY v1, v2;" ,
37+ Expected : []sql.Row {
38+ {1 , 3 },
39+ {1 , 4 },
40+ {2 , 3 },
41+ {2 , 4 },
42+ },
43+ },
44+ {
45+ Query : "SELECT DISTINCT * FROM test ORDER BY v1, v2;" ,
46+ Expected : []sql.Row {
47+ {1 , 3 },
48+ {1 , 4 },
49+ {2 , 3 },
50+ {2 , 4 },
51+ },
52+ },
53+ {
54+ Query : "SELECT DISTINCT ON(v1) * FROM test ORDER BY v1, v2;" ,
55+ Expected : []sql.Row {
56+ {1 , 3 },
57+ {2 , 3 },
58+ },
59+ },
60+ {
61+ Query : "SELECT DISTINCT ON(v2) * FROM test ORDER BY v2, v1;" ,
62+ Expected : []sql.Row {
63+ {1 , 3 },
64+ {1 , 4 },
65+ },
66+ },
67+ {
68+ Query : "SELECT DISTINCT ON(v1) * FROM test ORDER BY v2, v1;" ,
69+ ExpectedErr : sql .ErrDistinctOnMatchOrderBy .Message ,
70+ },
71+ {
72+ Query : "SELECT DISTINCT ON(v2) * FROM test ORDER BY v2 DESC, v1 DESC;" ,
73+ Expected : []sql.Row {
74+ {2 , 4 },
75+ {2 , 3 },
76+ },
77+ },
78+ {
79+ Query : "SELECT DISTINCT ON(v2, v1) * FROM test2 ORDER BY v1, v2;" ,
80+ Expected : []sql.Row {
81+ {1 , 3 , 5 },
82+ {1 , 4 , 5 },
83+ {2 , 3 , 5 },
84+ {2 , 4 , 5 },
85+ },
86+ },
87+ {
88+ Query : "SELECT DISTINCT ON(v2, v1) * FROM test2 ORDER BY v1, v2 DESC;" ,
89+ Expected : []sql.Row {
90+ {1 , 4 , 5 },
91+ {1 , 3 , 5 },
92+ {2 , 4 , 5 },
93+ {2 , 3 , 5 },
94+ },
95+ },
96+ {
97+ Query : "SELECT DISTINCT ON(v2, v1) * FROM test2 ORDER BY v1, v2 LIMIT 1;" ,
98+ Expected : []sql.Row {
99+ {1 , 3 , 5 },
100+ },
101+ },
102+ {
103+ Query : "SELECT DISTINCT ON(v2, v1) * FROM test2 ORDER BY v1, v2 DESC LIMIT 1;" ,
104+ Expected : []sql.Row {
105+ {1 , 4 , 5 },
106+ },
107+ },
108+ {
109+ Query : "SELECT DISTINCT ON(v1, v2, v3) * FROM test2 ORDER BY v1, v2;" ,
110+ Expected : []sql.Row {
111+ {1 , 3 , 5 },
112+ {1 , 4 , 5 },
113+ {2 , 3 , 5 },
114+ {2 , 4 , 5 },
115+ },
116+ },
117+ {
118+ Query : "SELECT DISTINCT ON(v3) v1 FROM test2;" ,
119+ Expected : []sql.Row {
120+ {1 },
121+ },
122+ },
123+ {
124+ Query : "SELECT DISTINCT ON(v1, v3) * FROM test2 ORDER BY v1, v2;" ,
125+ ExpectedErr : sql .ErrDistinctOnMatchOrderBy .Message ,
126+ },
127+ {
128+ Query : "SELECT DISTINCT ON(v2) * FROM test2 ORDER BY v1, v2;" ,
129+ ExpectedErr : sql .ErrDistinctOnMatchOrderBy .Message ,
130+ },
131+ },
132+ },
26133 {
27134 Name : "select values" ,
28135 Assertions : []ScriptTestAssertion {
0 commit comments