MCPcopy Create free account
hub / github.com/araddon/qlbridge / TestSqlRewrite

Function TestSqlRewrite

rel/sql_test.go:164–359  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

162}
163
164func TestSqlRewrite(t *testing.T) {
165 t.Parallel()
166 /*
167 SQL Re-writing is to take select statement with multiple sources (joins, sub-select)
168 and rewrite these sub-statements/sources into standalone statements
169 and prepare the column name, index mapping
170
171 - Do we want to send the columns fully aliased? ie
172 SELECT name AS u.name, email as u.email, user_id as u.user_id FROM users
173 */
174 s := `SELECT u.name, o.item_id, u.email, o.price
175 FROM users AS u INNER JOIN orders AS o
176 ON u.user_id = o.user_id;`
177 sql := parseOrPanic(t, s).(*rel.SqlSelect)
178 err := sql.Finalize()
179 assert.True(t, err == nil, "no error: %v", err)
180 assert.True(t, len(sql.Columns) == 4, "has 4 cols: %v", len(sql.Columns))
181 assert.True(t, len(sql.From) == 2, "has 2 sources: %v", len(sql.From))
182
183 // Test the Left/Right column level parsing
184 // TODO: This field should not be u.name? sourcefield should be name right? as = u.name?
185 col, _ := sql.Columns.ByName("u.name")
186 assert.True(t, col.As == "u.name", "col.As=%s", col.As)
187 left, right, ok := col.LeftRight()
188 //u.Debugf("left=%v right=%v ok%v", left, right, ok)
189 assert.True(t, left == "u" && right == "name" && ok == true)
190
191 rw1 := sql.From[0].Rewrite(sql)
192 assert.True(t, rw1 != nil, "should not be nil:")
193 assert.True(t, len(rw1.Columns) == 3, "has 3 cols: %v", rw1.Columns.String())
194 //u.Infof("SQL?: '%v'", rw1.String())
195 assert.Equal(t, rw1.String(), "SELECT name, email, user_id FROM users", "%v", rw1.String())
196
197 rw1 = sql.From[1].Rewrite(sql)
198 assert.True(t, rw1 != nil, "should not be nil:")
199 assert.True(t, len(rw1.Columns) == 3, "has 3 cols: %v", rw1.Columns.String())
200 //u.Infof("SQL?: '%v'", rw1.String())
201 assert.True(t, rw1.String() == "SELECT item_id, price, user_id FROM orders", "%v", rw1.String())
202
203 // Do we change?
204 //assert.Equal(t, sql.Columns.FieldNames(), []string{"user_id", "email", "item_id", "price"})
205
206 s = `SELECT u.name, u.email, b.title
207 FROM users AS u INNER JOIN blog AS b
208 ON u.name = b.author;`
209 sql = parseOrPanic(t, s).(*rel.SqlSelect)
210 assert.True(t, len(sql.Columns) == 3, "has 3 cols: %v", len(sql.Columns))
211 assert.True(t, len(sql.From) == 2, "has 2 sources: %v", len(sql.From))
212 rw1 = sql.From[0].Rewrite(sql)
213 assert.True(t, rw1 != nil, "should not be nil:")
214 assert.True(t, len(rw1.Columns) == 2, "has 2 cols: %v", rw1.Columns.String())
215 //u.Infof("SQL?: '%v'", rw1.String())
216 assert.True(t, rw1.String() == "SELECT name, email FROM users", "%v", rw1.String())
217 jn := sql.From[0].JoinNodes()
218 assert.True(t, len(jn) == 1, "%v", jn)
219 assert.True(t, jn[0].String() == "name", "wanted 1 node %v", jn[0].String())
220 cols := sql.From[0].UnAliasedColumns()
221 assert.True(t, len(cols) == 2, "Should have 2: %#v", cols)

Callers

nothing calls this directly

Calls 10

parseOrPanicFunction · 0.85
ByNameMethod · 0.80
JoinNodesMethod · 0.80
RewriteAsRawSelectMethod · 0.80
StringMethod · 0.65
EqualMethod · 0.65
FinalizeMethod · 0.45
LeftRightMethod · 0.45
RewriteMethod · 0.45
UnAliasedColumnsMethod · 0.45

Tested by

no test coverage detected