MCPcopy
hub / github.com/uber/aresdb / isValidWithOrSubQuery

Method isValidWithOrSubQuery

query/sql/sql_parser.go:1736–1780  ·  view source on GitHub ↗
(s2aCtx *SQL2AqlContext)

Source from the content-addressed store, hash-verified

1734}
1735
1736func (v *ASTBuilder) isValidWithOrSubQuery(s2aCtx *SQL2AqlContext) (bool, error) {
1737 var isTrue, exist bool
1738 var err error
1739 var mapKey int
1740
1741 // check if from clause in main query(ie. qLevel = 0) mix table with subquery/withQuery
1742 if isTrue, err = v.isQueryFromMixed(s2aCtx); isTrue {
1743 return false, err
1744 }
1745
1746 // check if all subquery/withQuery from clauses are same
1747 for i, value := range s2aCtx.MapJoinTables[0] {
1748 // exit if no subquery/withQuery
1749 if len(value.Table) > 0 {
1750 break
1751 }
1752
1753 if len(value.Alias) == 0 { // subquery has no identifier
1754 mapKey = v.generateKey(1, typeSubQuery, i)
1755 } else {
1756 mapKey, exist = s2aCtx.queryIdentifierSet[value.Alias]
1757 if !exist {
1758 err = fmt.Errorf("cannot find withQuery identifier: %s", value.Alias)
1759 return false, err
1760 }
1761 }
1762
1763 isTrue, err = v.isSameFromTables(s2aCtx, mapKey)
1764 if !isTrue {
1765 return false, err
1766 }
1767
1768 isTrue, err = v.isSameGroupBy(s2aCtx, mapKey)
1769 if !isTrue {
1770 return false, err
1771 }
1772
1773 isTrue, err = v.isSameOrderBy(s2aCtx, mapKey)
1774 if !isTrue {
1775 return false, err
1776 }
1777 }
1778
1779 return true, nil
1780}
1781
1782// AQL requires that the first level query is either from tables or from subqueries/withQuery
1783func (v *ASTBuilder) isQueryFromMixed(s2aCtx *SQL2AqlContext) (bool, error) {

Callers 1

VisitQueryMethod · 0.95

Calls 6

isQueryFromMixedMethod · 0.95
generateKeyMethod · 0.95
isSameFromTablesMethod · 0.95
isSameGroupByMethod · 0.95
isSameOrderByMethod · 0.95
ErrorfMethod · 0.65

Tested by

no test coverage detected