protected internal virtual FullTextQuery term(QueryScanner scanner) { FullTextQuery q = null; switch (scanner.scan()) { case QueryScanner.TKN_NOT: q = term(scanner); return((q != null) ? new FullTextQueryUnaryOp(FullTextQuery.Operator.Not, q) : null); case QueryScanner.TKN_LPAR: q = disjunction(scanner); break; case QueryScanner.TKN_WORD: q = new FullTextQueryMatchOp(scanner.inQuotes ? FullTextQuery.Operator.StrictMatch : FullTextQuery.Operator.Match, scanner.word, scanner.wordPos); break; case QueryScanner.TKN_EOQ: return(null); default: break; } scanner.scan(); return(q); }
public override string ToString() { StringBuilder result = new StringBuilder(); result.Append(QueryScanner.WrapColumnName(this.ColumnName)); result.Append(this.Operator.ToSyntaxString()); result.Append("IN("); for (int i = 0; i < this.Values.Length; ++i) { if (i > 0) { result.Append(", "); } if (i > 4) { result.AppendFormat("... [{0:n0}]", this.Values.Length); break; } result.Append(QueryScanner.WrapValue(this.Values.GetValue(i).ToString())); } result.Append(")"); return(result.ToString()); }
public void EmptyQueriesShouldJustReturnEndOfInput(string q) { var qs = new QueryScanner(); qs.Init(q); Assert.False(qs.Identifier()); }
public void ParseStringLiterals(string q, string escape) { var qs = new QueryScanner(); qs.Init(q); Assert.True(qs.String(out var a)); Assert.Equal(escape, a); }
public void AlterTest() { Query Q = new Query("Alter Table Projects Add Year string;"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); }
public void InsertTest1() { Query Q = new Query("Insert Into Projects(ID,Name,Rating) Values(1,\"Database Architect\",99);"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); }
public void SELECTAndTree() { Query Q = new Query("SELECT PrName,Rating FROM Projects WHERE Rating=90 or Name=\"DatabaseArchitect\" and Rating>80;"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); }
public void ParseStringLiterals(string q, int escape) { var qs = new QueryScanner(); qs.Init(q); Assert.True(qs.String()); Assert.Equal(escape, qs.EscapeChars); }
public void IdentifierShouldBeFound(string q, int start, int len) { var qs = new QueryScanner(); qs.Init(q); Assert.True(qs.Identifier()); Assert.Equal(start, qs.TokenStart); Assert.Equal(len, qs.TokenLength); }
public void CanScanConsecutiveIdentifiers(string q, int start, int len) { var qs = new QueryScanner(); qs.Init(q); Assert.True(qs.Identifier()); Assert.True(qs.Identifier()); Assert.Equal(start, qs.TokenStart); Assert.Equal(len, qs.TokenLength); }
private static List <Token> Tokenize(string value) { QueryScanner scanner = new QueryScanner(new StringReader(value)); List <Token> tokens = new List <Token>(); while (scanner.Next()) { tokens.Add(scanner.Current); } return(tokens); }
public void ParseNumbers(string q, object expected) { var qs = new QueryScanner(); qs.Init(q); var result = qs.TryNumber(); Assert.NotNull(result); if (result == NumberToken.Double) { Assert.Equal((double)expected, double.Parse(q.Substring(qs.TokenStart, qs.TokenLength), CultureInfo.InvariantCulture)); } else { Assert.Equal((long)expected, long.Parse(q.Substring(qs.TokenStart, qs.TokenLength), CultureInfo.InvariantCulture)); } }
public void SELECT1() { Database DB = new Database(@"C:\Users\Moataz\Workspace\Software\Database Architect\Active Code\DatabaseArchitect\Southwind\Database.db.txt"); DB.Read(); foreach (Table T in DB.Tables) { T.ReadRecords(); } Query Q = new Query("SELECT Rating,Name,Rating FROM Projects WHERE Rating=90 or Name=\"Software Architect\" or Name=\"DatabaseArchitect\";"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); QueryExecutioner QE = new QueryExecutioner(QT, DB, null); Table Ti = QE.ExecuteQuery(); }
public void RightJoinTest() { Database DB = new Database(@"C:\Users\Moataz\Workspace\Software\Database Architect\Active Code\DatabaseArchitect\Southwind\Database.db.txt"); DB.Read(); foreach (Table T in DB.Tables) { T.ReadRecords(); } Query Q = new Query("SELECT * FROM Projects RIGHT JOIN Grades ON GradeID=ID;"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); QueryExecutioner QE = new QueryExecutioner(QT, DB, null); Table Ti = QE.ExecuteQuery(); }
protected internal virtual FullTextQuery disjunction(QueryScanner scanner) { FullTextQuery left = conjunction(scanner); if (scanner.token == QueryScanner.TKN_OR) { FullTextQuery right = disjunction(scanner); if (left != null && right != null) { return(new FullTextQueryBinaryOp(FullTextQuery.Operator.Or, left, right)); } else if (right != null) { return(right); } } return(left); }
static object ProcessQuery(Request Qr) { if (!(Qr.Attachment is string)) { return("Invalid Query"); } string Qs = Qr.Attachment as string; Query Q = new Query(Qs); try { QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree Qt = QP.Reorder(); QueryExecutioner Qexec = new QueryExecutioner(Qt, Server.Database, ServerReaders.ReadRecords); Table Ti = Qexec.ExecuteQuery(); if (Qexec.AfterEffect[0]) { Server.Database.Write(); } if (Qexec.AfterEffect[1]) { Qexec.Tables.Last().Write(); } if (Qexec.AfterEffect[2]) { Qexec.Tables.Last().WriteRecords(); } if (Ti == null) { return(Qexec.Result); } return(Ti); } catch (Exception Ex) { return(Ex.Message); } }
public void UpdateTest() { Database DB = new Database(@"C:\Users\Moataz\Workspace\Software\Database Architect\Active Code\DatabaseArchitect\Southwind\Database.db.txt"); DB.Read(); foreach (Table T in DB.Tables) { T.ReadRecords(); } Query Q = new Query("UPDATE Projects SET ID=1, Name=\"Database Architect\", Rating=100 WHERE ID=1;"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); QueryExecutioner QE = new QueryExecutioner(QT, DB, null); QE.ExecuteQuery(); }
public void DeleteTest() { TokenType[] Tokens = { TokenType.DELETE_cmd, TokenType.FROM_KW, TokenType.Identifier_Table, TokenType.WHERE_KW, TokenType.Identifier_Key, TokenType.LessThan, TokenType.Immediate_value, TokenType.SemiColon }; Query Q = new Query("Delete FROM Projects WHERE Rating<50;"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); Assert.AreEqual(Q.QueryTokens.Count, Tokens.Count()); for (int i = 0; i < Q.QueryTokens.Count; i++) { if (Q.QueryTokens[i].Type != Tokens[i]) { throw new Exception("Scanner logic failure, Expected " + Tokens[i].ToString() + "recieved " + Q.QueryTokens[i].Type.ToString()); } } QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); }
public void CreateTest2() { TokenType[] Tokens = { TokenType.CREATE_cmd, TokenType.TABLE_KW, TokenType.Identifier_Table, TokenType.LBracket, TokenType.Identifier_Key, TokenType.DATATYPE, TokenType.Comma, TokenType.Identifier_Key, TokenType.DATATYPE, TokenType.Comma, TokenType.Identifier_Key, TokenType.DATATYPE, TokenType.RBracket, TokenType.SemiColon }; Query Q = new Query("CREATE TABLE Projects(ID int32,Name string,Rating int32);"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); Assert.AreEqual(Q.QueryTokens.Count, Tokens.Count()); for (int i = 0; i < Q.QueryTokens.Count; i++) { if (Q.QueryTokens[i].Type != Tokens[i]) { throw new Exception("Scanner logic failure, Expected " + Tokens[i].ToString() + "recieved " + Q.QueryTokens[i].Type.ToString()); } } QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); }
public void UpdateTest2() { TokenType[] Tokens = { TokenType.UPDATE_cmd, TokenType.Identifier_Table, TokenType.SET_cmd, TokenType.Identifier_Key, TokenType.Equal, TokenType.Immediate_value, TokenType.Comma, TokenType.Identifier_Key, TokenType.Equal, TokenType.Immediate_value, TokenType.Comma, TokenType.Identifier_Key, TokenType.Equal, TokenType.Immediate_value, TokenType.SemiColon }; Query Q = new Query("UPDATE Projects SET ID=1, Name=\"Database Architect\", Rating=100;"); QueryScanner QS = new QueryScanner(Q); Q = QS.Scan(); Assert.AreEqual(Q.QueryTokens.Count, Tokens.Count()); for (int i = 0; i < Q.QueryTokens.Count; i++) { if (Q.QueryTokens[i].Type != Tokens[i]) { throw new Exception("Scanner logic failure"); } } QueryParser QP = new QueryParser(Q); QueryTree QT = QP.Reorder(); }
protected internal virtual FullTextQuery conjunction(QueryScanner scanner) { FullTextQuery left = term(scanner); if (scanner.token == QueryScanner.TKN_WORD || scanner.token == QueryScanner.TKN_AND) { if (scanner.token == QueryScanner.TKN_WORD) { scanner.unget = true; } FullTextQuery.Operator cop = scanner.inQuotes ? FullTextQuery.Operator.Near : FullTextQuery.Operator.And; FullTextQuery right = disjunction(scanner); if (left != null && right != null) { return(new FullTextQueryBinaryOp(cop, left, right)); } else if (right != null) { return(right); } } return(left); }
protected internal virtual FullTextQuery term(QueryScanner scanner) { FullTextQuery q = null; switch (scanner.scan()) { case QueryScanner.TKN_NOT: q = term(scanner); return (q != null) ? new FullTextQueryUnaryOp(FullTextQuery.Operator.Not, q) : null; case QueryScanner.TKN_LPAR: q = disjunction(scanner); break; case QueryScanner.TKN_WORD: q = new FullTextQueryMatchOp(scanner.inQuotes ? FullTextQuery.Operator.StrictMatch : FullTextQuery.Operator.Match, scanner.word, scanner.wordPos); break; case QueryScanner.TKN_EOQ: return null; default: break; } scanner.scan(); return q; }
protected internal virtual FullTextQuery conjunction(QueryScanner scanner) { FullTextQuery left = term(scanner); if (scanner.token == QueryScanner.TKN_WORD || scanner.token == QueryScanner.TKN_AND) { if (scanner.token == QueryScanner.TKN_WORD) { scanner.unget = true; } FullTextQuery.Operator cop = scanner.inQuotes ? FullTextQuery.Operator.Near : FullTextQuery.Operator.And; FullTextQuery right = disjunction(scanner); if (left != null && right != null) { return new FullTextQueryBinaryOp(cop, left, right); } else if (right != null) { return right; } } return left; }
protected internal virtual FullTextQuery disjunction(QueryScanner scanner) { FullTextQuery left = conjunction(scanner); if (scanner.token == QueryScanner.TKN_OR) { FullTextQuery right = disjunction(scanner); if (left != null && right != null) { return new FullTextQueryBinaryOp(FullTextQuery.Operator.Or, left, right); } else if (right != null) { return right; } } return left; }
public override string ToString() { return(StringExtensions.Format("{0}{1}{2}", QueryScanner.WrapColumnName(this.ColumnName), this.Operator.ToSyntaxString(), QueryScanner.WrapValue(this.Value.ToString()))); }