public override TokenList GetChildren() { TokenList children = new TokenList(asToken); children.Add(subquery); children.AddRange(joinKeywords); children.Add(joinExpression); return(children); }
void AddParsedToken(Token t) { // t.id = t.tokenType.ToString() + parsedTokens.Count.ToString(); t.charBefore = GetCharAt(t.startOffset - 1); t.charAfter = GetCharAt(t.startOffset + t.expressionLength); parsedTokens.Add(t); }
public void Visit(Token token) { if (types.Contains(token.tokenType)) { tokens.Add(token); } }
public int Difference(TokenList list, out TokenList result, bool onlySignificantOnes = false, int max = 0) { result = new TokenList(); bool compareStartOffsets = false; int added = 0; int deleted = 0; int moved = 0; foreach (Token tNew in list.tokens) { Token tOld = GetTokenById(tNew.id); if (tOld == null) { tNew.status = TokenStatus.Added; result.Add(tNew); added++; } if (max > 0 && result.Count >= max) { return(result.Count); } } foreach (Token tOld in tokens) { Token tNew = list.GetTokenById(tOld.id); if (tNew == null) { tOld.status = TokenStatus.Removed; result.AddIfNotExists(tOld); deleted++; if (max > 0 && result.Count >= max) { return(result.Count); } } else if (compareStartOffsets && tNew.startOffset != tOld.startOffset) { tNew.status = TokenStatus.Moved; result.AddIfNotExists(tNew); moved++; if (max > 0 && result.Count >= max) { return(result.Count); } } } if (result.Count > 0) { T.Debug("changed - added: " + added + " deleted: " + deleted + " moved:" + moved); } return(result.Count); }
public TokenList GetTokensWithin(Token tParent, TokenType[] types = null, string name = null) { TokenList result = new TokenList(); foreach (int offset in tokensByOffset.Keys) { Token t = tokensByOffset[offset]; if (tParent.TokenWithin(t, false) && (types == null || types.Contains(t.tokenType)) && (name == null || t.name == name)) { result.Add(t); } } return(result); }
public TokenList GetTokensWithin(Token tParent, int start, int end, TokenType[] types = null) { TokenList result = new TokenList(); foreach (int offset in tokensByOffset.Keys) { Token t = tokensByOffset[offset]; if (t.startOffset >= start && t.rightExtent <= end && tParent.TokenWithin(t, false) && (types == null || types.Contains(t.tokenType))) { result.Add(t); } } return(result); }
public override TokenList GetChildren() { TokenList result = new TokenList(); result.Add(asToken); result.Add(columnNameToken); result.Add(scalarSubquery); result.Add(columnAliasToken); result.Add(columnExpression); result.Add(tableAliasToken); return(result); }
public TokenList GetNextTokens(Token tOrigin, TokenType[] types = null, string[] names = null, int rightBoundary = -1, int maxToReturn = -1) { TokenList result = new TokenList(); foreach (int offset in GetNextOffsets(tOrigin, rightBoundary)) { Token t = tokensByOffset[offset]; T.Assert(t.startOffset > tOrigin.startOffset && (rightBoundary == -1 || t.startOffset < rightBoundary)); if ((types == null || types.Contains(t.tokenType)) && (names == null || names.Contains(t.name))) { result.Add(t); } if (maxToReturn > 0 && result.Count >= maxToReturn) { break; } } return(result); }
public TokenList GetPrevTokens(Token tOrigin, TokenType[] types = null, string[] names = null, int leftBoundary = -1, int maxToReturn = -1) { // returns tokens in order of descending offset position TokenList result = new TokenList(); foreach (int offset in GetPrevOffsets(tOrigin, leftBoundary)) { Token t = tokensByOffset[offset]; T.Assert(t.startOffset < tOrigin.startOffset && (leftBoundary == -1 || t.startOffset >= leftBoundary)); if ((types == null || types.Contains(t.tokenType)) && (names == null || names.Contains(t.name))) { result.Add(t); } if (maxToReturn > 0 && result.Count >= maxToReturn) { break; } } return(result); }
public override void Build() { TokenList fromTokens = GetTokensWithin(); for (int i = 0; i < tables.tokens.Count - 1; i++) { Table leftTable = tables[i] as Table; Table rightTable = tables[i + 1] as Table; TokenList joinTokens = fromTokens.GetNextTokens(leftTable, new[] { TokenType.Keyword }, null, rightTable.startOffset); string joinType = joinTokens.GetNames(); Token onToken = fromTokens.GetNearestTokenAfter(rightTable, TokenType.Keyword, "on"); if (joinType.Contains("join") && onToken != null) { joinTokens.Add(onToken); TokenList joinExpression = fromTokens.GetNextTokens(onToken, new[] { TokenType.Literal, TokenType.Operator, TokenType.Column }, null, rightExtent); if (joinExpression.Count > 0) { leftTable.AddJoin(joinType, rightTable, joinTokens, joinExpression); } } } }
public override TokenList GetChildren() { TokenList children = new TokenList(); children.Add(select); children.Add(from); children.Add(where); children.Add(group); children.Add(order); children.Add(limit); if (children.Count == 0) { foreach (Query q in queries) { children.Add(q); } } return(children); }