@@ -33,6 +33,20 @@ var queries = []struct {
3333 "SELECT i FROM mytable;" ,
3434 []sql.Row {{int64 (1 )}, {int64 (2 )}, {int64 (3 )}},
3535 },
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+ },
3650 {
3751 "SELECT i + 1 FROM mytable;" ,
3852 []sql.Row {{int64 (2 )}, {int64 (3 )}, {int64 (4 )}},
@@ -2113,6 +2127,97 @@ func TestInsertInto(t *testing.T) {
21132127 "SELECT * FROM typestable WHERE id = 999;" ,
21142128 []sql.Row {{int64 (999 ), nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil , nil }},
21152129 },
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+ },
21162221 }
21172222
21182223 for _ , insertion := range insertions {
@@ -2168,6 +2273,22 @@ func TestInsertIntoErrors(t *testing.T) {
21682273 "null given to non-nullable" ,
21692274 "INSERT INTO mytable (i, s) VALUES (null, 'y');" ,
21702275 },
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+ },
21712292 }
21722293
21732294 for _ , expectedFailure := range expectedFailures {
0 commit comments