@@ -33,6 +33,20 @@ var queries = []struct {
33
33
"SELECT i FROM mytable;" ,
34
34
[]sql.Row {{int64 (1 )}, {int64 (2 )}, {int64 (3 )}},
35
35
},
36
+ {
37
+ "SELECT s,i FROM mytable;" ,
38
+ []sql.Row {
39
+ {"first row" , int64 (1 )},
40
+ {"second row" , int64 (2 )},
41
+ {"third row" , int64 (3 )}},
42
+ },
43
+ {
44
+ "SELECT s,i FROM (select i,s from mytable) mt;" ,
45
+ []sql.Row {
46
+ {"first row" , int64 (1 )},
47
+ {"second row" , int64 (2 )},
48
+ {"third row" , int64 (3 )}},
49
+ },
36
50
{
37
51
"SELECT i + 1 FROM mytable;" ,
38
52
[]sql.Row {{int64 (2 )}, {int64 (3 )}, {int64 (4 )}},
@@ -2113,6 +2127,97 @@ func TestInsertInto(t *testing.T) {
2113
2127
"SELECT * FROM typestable WHERE id = 999;" ,
2114
2128
[]sql.Row {{int64 (999 ), nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil }},
2115
2129
},
2130
+ {
2131
+ "INSERT INTO mytable SELECT * from mytable" ,
2132
+ []sql.Row {{int64 (3 )}},
2133
+ "SELECT * FROM mytable order by i" ,
2134
+ []sql.Row {
2135
+ {int64 (1 ), "first row" },
2136
+ {int64 (1 ), "first row" },
2137
+ {int64 (2 ), "second row" },
2138
+ {int64 (2 ), "second row" },
2139
+ {int64 (3 ), "third row" },
2140
+ {int64 (3 ), "third row" },
2141
+ },
2142
+ },
2143
+ {
2144
+ "INSERT INTO mytable(i,s) SELECT * from mytable" ,
2145
+ []sql.Row {{int64 (3 )}},
2146
+ "SELECT * FROM mytable order by i" ,
2147
+ []sql.Row {
2148
+ {int64 (1 ), "first row" },
2149
+ {int64 (1 ), "first row" },
2150
+ {int64 (2 ), "second row" },
2151
+ {int64 (2 ), "second row" },
2152
+ {int64 (3 ), "third row" },
2153
+ {int64 (3 ), "third row" },
2154
+ },
2155
+ },
2156
+ {
2157
+ "INSERT INTO mytable (i,s) SELECT i+10, 'new' from mytable" ,
2158
+ []sql.Row {{int64 (3 )}},
2159
+ "SELECT * FROM mytable order by i" ,
2160
+ []sql.Row {
2161
+ {int64 (1 ), "first row" },
2162
+ {int64 (2 ), "second row" },
2163
+ {int64 (3 ), "third row" },
2164
+ {int64 (11 ), "new" },
2165
+ {int64 (12 ), "new" },
2166
+ {int64 (13 ), "new" },
2167
+ },
2168
+ },
2169
+ {
2170
+ "INSERT INTO mytable SELECT i2, s2 from othertable" ,
2171
+ []sql.Row {{int64 (3 )}},
2172
+ "SELECT * FROM mytable order by i,s" ,
2173
+ []sql.Row {
2174
+ {int64 (1 ), "first row" },
2175
+ {int64 (1 ), "third" },
2176
+ {int64 (2 ), "second" },
2177
+ {int64 (2 ), "second row" },
2178
+ {int64 (3 ), "first" },
2179
+ {int64 (3 ), "third row" },
2180
+ },
2181
+ },
2182
+ {
2183
+ "INSERT INTO mytable (s,i) SELECT * from othertable" ,
2184
+ []sql.Row {{int64 (3 )}},
2185
+ "SELECT * FROM mytable order by i,s" ,
2186
+ []sql.Row {
2187
+ {int64 (1 ), "first row" },
2188
+ {int64 (1 ), "third" },
2189
+ {int64 (2 ), "second" },
2190
+ {int64 (2 ), "second row" },
2191
+ {int64 (3 ), "first" },
2192
+ {int64 (3 ), "third row" },
2193
+ },
2194
+ },
2195
+ {
2196
+ "INSERT INTO mytable (s,i) SELECT concat(m.s, o.s2), m.i from othertable o join mytable m on m.i=o.i2" ,
2197
+ []sql.Row {{int64 (3 )}},
2198
+ "SELECT * FROM mytable order by i,s" ,
2199
+ []sql.Row {
2200
+ {int64 (1 ), "first row" },
2201
+ {int64 (1 ), "first rowthird" },
2202
+ {int64 (2 ), "second row" },
2203
+ {int64 (2 ), "second rowsecond" },
2204
+ {int64 (3 ), "third row" },
2205
+ {int64 (3 ), "third rowfirst" },
2206
+ },
2207
+ },
2208
+ {
2209
+ "INSERT INTO mytable (i,s) SELECT (i + 10.0) / 10.0 + 10, concat(s, ' new') from mytable" ,
2210
+ []sql.Row {{int64 (3 )}},
2211
+ "SELECT * FROM mytable order by i, s" ,
2212
+ []sql.Row {
2213
+ {int64 (1 ), "first row" },
2214
+ {int64 (2 ), "second row" },
2215
+ {int64 (3 ), "third row" },
2216
+ {int64 (11 ), "first row new" },
2217
+ {int64 (11 ), "second row new" },
2218
+ {int64 (11 ), "third row new" },
2219
+ },
2220
+ },
2116
2221
}
2117
2222
2118
2223
for _ , insertion := range insertions {
@@ -2168,6 +2273,22 @@ func TestInsertIntoErrors(t *testing.T) {
2168
2273
"null given to non-nullable" ,
2169
2274
"INSERT INTO mytable (i, s) VALUES (null, 'y');" ,
2170
2275
},
2276
+ {
2277
+ "incompatible types" ,
2278
+ "INSERT INTO mytable (i, s) select * from othertable" ,
2279
+ },
2280
+ {
2281
+ "column count mismatch in select" ,
2282
+ "INSERT INTO mytable (i) select * from othertable" ,
2283
+ },
2284
+ {
2285
+ "column count mismatch in select" ,
2286
+ "INSERT INTO mytable select s from othertable" ,
2287
+ },
2288
+ {
2289
+ "column count mismatch in join select" ,
2290
+ "INSERT INTO mytable (s,i) SELECT * from othertable o join mytable m on m.i=o.i2" ,
2291
+ },
2171
2292
}
2172
2293
2173
2294
for _ , expectedFailure := range expectedFailures {
0 commit comments