public void EnforceTwoPartIdentifierChain() { Tokenizer testSubject = new Tokenizer(); Assert.AreEqual(false, testSubject.EnforceTwoPartIdentifierChain); testSubject.EnforceTwoPartIdentifierChain = true; Assert.AreEqual(true, testSubject.EnforceTwoPartIdentifierChain); testSubject.Reset("foo.bar.baz"); try { testSubject.GetNextAsName(); } catch (HsqlDataSourceException hdse) { Assert.AreEqual(org.hsqldb.Trace.THREE_PART_IDENTIFIER, -hdse.ErrorCode); } testSubject.EnforceTwoPartIdentifierChain = false; testSubject.Reset("foo.\"bar\".baz.null.true.false"); testSubject.GetNextAsName(); Token[] expected = new Token[] { new Token("FOO",SqlTokenType.Name), new Token("bar",SqlTokenType.DelimitedIdentifier), new Token("BAZ",SqlTokenType.Name), new Token("NULL",SqlTokenType.Name), new Token("TRUE",SqlTokenType.Name), new Token("FALSE",SqlTokenType.Name), }; int i = 0; foreach (Token token in testSubject.IdentifierChain) { Console.WriteLine(token); Console.WriteLine(expected[i]); Assert.AreEqual(expected[i], token); i++; } }
public void LastPart() { Tokenizer testSubject = new Tokenizer("create table test(id int, \"val\" varchar(12));"); Assert.AreEqual(Token.ValueFor.CREATE, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(6, testSubject.Position); Assert.AreEqual("create", testSubject.LastPart); Assert.AreEqual(Token.ValueFor.TABLE, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(12, testSubject.Position); Assert.AreEqual("create table", testSubject.LastPart); testSubject.PartMarker = testSubject.Position + 1; Assert.AreEqual("TEST", testSubject.GetNextAsSimpleName()); Assert.AreEqual(17, testSubject.Position); Assert.AreEqual("test", testSubject.LastPart); Assert.AreEqual(Token.ValueFor.OPENBRACKET, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(18, testSubject.Position); Assert.AreEqual("test(", testSubject.LastPart); Assert.AreEqual("ID", testSubject.GetNextAsSimpleName()); Assert.AreEqual(20, testSubject.Position); Assert.AreEqual("test(id", testSubject.LastPart); Assert.AreEqual(Token.ValueFor.INT, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(24, testSubject.Position); Assert.AreEqual("test(id int", testSubject.LastPart); testSubject.SetPartMarker(); Assert.AreEqual(Token.ValueFor.COMMA, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(25, testSubject.Position); Assert.AreEqual(Token.ValueFor.COMMA, testSubject.LastPart); Assert.AreEqual("val", testSubject.GetNextAsName()); Assert.AreEqual(SqlTokenType.DelimitedIdentifier, testSubject.TokenType); Assert.AreEqual(31,testSubject.Position); Assert.AreEqual(", \"val\"", testSubject.LastPart); Assert.AreEqual(Token.ValueFor.VARCHAR, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(39, testSubject.Position); Assert.AreEqual(", \"val\" varchar", testSubject.LastPart); Assert.AreEqual(Token.ValueFor.OPENBRACKET, testSubject.GetThis(Token.ValueFor.OPENBRACKET)); Assert.AreEqual(40, testSubject.Position); Assert.AreEqual(", \"val\" varchar(", testSubject.LastPart); Assert.AreEqual(12, testSubject.GetNextAsInt()); Assert.AreEqual(42, testSubject.Position); Assert.AreEqual(", \"val\" varchar(12", testSubject.LastPart); Assert.AreEqual(Token.ValueFor.CLOSEBRACKET, testSubject.GetThis(Token.ValueFor.CLOSEBRACKET)); Assert.AreEqual(43, testSubject.Position); Assert.AreEqual(", \"val\" varchar(12)", testSubject.LastPart); testSubject.SetPartMarker(); Assert.AreEqual(Token.ValueFor.CLOSEBRACKET, testSubject.GetThis(Token.ValueFor.CLOSEBRACKET)); Assert.AreEqual(44, testSubject.Position); Assert.AreEqual(Token.ValueFor.CLOSEBRACKET, testSubject.LastPart); Assert.AreEqual(Token.ValueFor.SEMICOLON, testSubject.GetThis(Token.ValueFor.SEMICOLON)); Assert.AreEqual(45, testSubject.Position); Assert.AreEqual(");", testSubject.LastPart); Assert.AreEqual(string.Empty, testSubject.GetNextAsString()); Assert.AreEqual(45, testSubject.Position); Assert.AreEqual(");", testSubject.LastPart); testSubject.SetPartMarker(); Assert.AreEqual(string.Empty, testSubject.LastPart); }
public void IsGetThis() { Tokenizer testSubject = new Tokenizer("create table test(id int, \"val\" varchar(12));"); if (testSubject.IsGetThis(Token.ValueFor.ALTER)) { Assert.AreEqual(Token.ValueFor.CREATE, Token.ValueFor.ALTER); } else if (testSubject.IsGetThis(Token.ValueFor.CREATE)) { if (testSubject.IsGetThis(Token.ValueFor.VIEW)) { Assert.AreEqual(Token.ValueFor.TABLE, Token.ValueFor.VIEW); } else if (testSubject.IsGetThis(Token.ValueFor.TABLE)) { string table_name = testSubject.GetNextAsName(); } else { Assert.AreNotEqual(Token.ValueFor.TABLE, testSubject.GetNextAsString()); } } else if (testSubject.IsGetThis(Token.ValueFor.DROP)) { Assert.AreEqual(Token.ValueFor.CREATE, Token.ValueFor.DROP); } else { Assert.AreNotEqual(Token.ValueFor.CREATE, testSubject.GetNextAsString()); } }
public void IdentiferChainLengthExceeded() { try { throw Tokenizer.IdentiferChainLengthExceeded(); } catch (Exception ex) { Assert.IsInstanceOfType(typeof(HsqlDataSourceException), ex); Assert.AreEqual(org.hsqldb.Trace.THREE_PART_IDENTIFIER, -((HsqlDataSourceException)ex).ErrorCode); } Tokenizer testSubject = new Tokenizer("foo.bar.baz"); testSubject.EnforceTwoPartIdentifierChain = true; try { string name = testSubject.GetNextAsName(); Assert.Fail("successful invocation of ReadToken() with greater than 2-part identifier token"); } catch (AssertionException) { throw; } catch (Exception ex) { Assert.IsInstanceOfType(typeof(HsqlDataSourceException), ex); Assert.AreEqual(org.hsqldb.Trace.THREE_PART_IDENTIFIER, -((HsqlDataSourceException)ex).ErrorCode); } }
public void IdentiferChain() { object[] input = new object[] { new object [] { "foo.bar.baz", new Token[]{ new Token("FOO",SqlTokenType.Name), new Token("BAR",SqlTokenType.Name), new Token("BAZ",SqlTokenType.Name) } }, new object [] { "\"foo\".bar.\"baz\"", new Token[]{ new Token("foo",SqlTokenType.DelimitedIdentifier), new Token("BAR",SqlTokenType.Name), new Token("baz",SqlTokenType.DelimitedIdentifier) } }, new object [] { "\"foo.bar\".baz", new Token[]{ new Token("foo.bar",SqlTokenType.DelimitedIdentifier), new Token("BAZ",SqlTokenType.Name) } } }; foreach (object[] item in input) { string toTokenize = item[0] as string; Token[] expectedTokens = item[1] as Token[]; Tokenizer testSubject = new Tokenizer(toTokenize); string result = testSubject.GetNextAsName(); Token[] actualTokens = new List<Token>(testSubject.IdentifierChain).ToArray(); Assert.AreEqual(expectedTokens.Length, actualTokens.Length); for (int i = 0; i < expectedTokens.Length; i++) { Token expectedToken = expectedTokens[i]; Token actualToken = actualTokens[i]; Assert.AreEqual(expectedToken, actualToken); } } }
public void GetNextAsName() { Tokenizer testSubject = new Tokenizer("CREATE TABLE \"PUBLIC\".\"Foo \"\"BarBaz\"\"\""); testSubject.GetThis("CREATE"); testSubject.GetThis("TABLE"); string expectedSubjectPart = "Foo \"BarBaz\""; string expectedQualifierPart = "PUBLIC"; string actualSubjectPart = testSubject.GetNextAsName(); string actualQualifierPart = testSubject.IdentifierChainPredecessor; Assert.AreEqual(expectedQualifierPart, actualQualifierPart, "schema qualifier" ); Assert.AreEqual(expectedSubjectPart, actualSubjectPart, "object name"); }
public void WasThis() { Tokenizer testSubject = new Tokenizer("foo bar \"baz\" foo.bar"); testSubject.GetThis("FOO"); testSubject.GetThis("BAR"); Assert.AreEqual(true, testSubject.WasThis("BAR")); Assert.AreEqual(false, testSubject.WasThis("bar")); Assert.AreEqual(false, testSubject.WasThis(" BAR ")); Assert.AreEqual(false, testSubject.WasThis("NOTBAR")); string name = testSubject.GetNextAsName(); // not for use with delimited identifier. Assert.AreEqual(false, testSubject.WasThis("baz")); Assert.AreEqual(false, testSubject.WasThis("BAZ")); Assert.AreEqual(false, testSubject.WasThis(" baz ")); Assert.AreEqual(false, testSubject.WasThis("notbaz")); string s = testSubject.GetNextAsString(); // not for use with identifier chain. Assert.AreEqual(false, testSubject.WasThis("bar")); Assert.AreEqual(false, testSubject.WasThis("BAR")); Assert.AreEqual(false, testSubject.WasThis(" bar ")); Assert.AreEqual(false, testSubject.WasThis("notbar")); }
public void WasIdentifierChainPredecessorDelimited() { Tokenizer testSubject = new Tokenizer("foo foo.bar \"foo\".bar"); testSubject.GetNextAsName(); Assert.AreEqual(false, testSubject.WasIdentifierChain); Assert.AreEqual(false, testSubject.WasIdentifierChainPredecessorDelimited); testSubject.GetNextAsName(); Assert.AreEqual(true, testSubject.WasIdentifierChain); Assert.AreEqual(false, testSubject.WasIdentifierChainPredecessorDelimited); testSubject.GetNextAsName(); Assert.AreEqual(true, testSubject.WasIdentifierChain); Assert.AreEqual(true, testSubject.WasIdentifierChainPredecessorDelimited); }
public void WasIdentifierChain() { Tokenizer testSubject = new Tokenizer("foo foo.bar \"foo\".bar foo.\"bar\" \"foo\".\"bar\" \"foo\".\"bar\""); testSubject.GetNextAsName(); Assert.AreEqual(false, testSubject.WasIdentifierChain); string tokenValue; while (string.Empty != (tokenValue = testSubject.GetNextAsName())) { Assert.AreEqual(true, testSubject.WasIdentifierChain); } }
public void WasDelimitedIdentifier() { Tokenizer testSubject = new Tokenizer("+ join foo \"foo\" bar.\"foo\""); testSubject.GetThis(Token.ValueFor.PLUS); Assert.AreEqual(false, testSubject.WasDelimitedIdentifier); Assert.AreEqual(Token.ValueFor.JOIN, testSubject.GetNextAsSimpleToken()); Assert.AreEqual(false, testSubject.WasDelimitedIdentifier); Assert.AreEqual("FOO", testSubject.GetNextAsName()); Assert.AreEqual(false, testSubject.WasDelimitedIdentifier); Assert.AreEqual("foo", testSubject.GetNextAsName()); Assert.AreEqual(true, testSubject.WasDelimitedIdentifier); Assert.AreEqual(false, testSubject.WasIdentifierChain); Assert.AreEqual(null, testSubject.IdentifierChainPredecessor); Assert.AreEqual("foo", testSubject.GetNextAsName()); Assert.AreEqual(true, testSubject.WasDelimitedIdentifier); Assert.AreEqual(true, testSubject.WasIdentifierChain); Assert.AreEqual(false, testSubject.WasIdentifierChainPredecessorDelimited); Assert.AreEqual("BAR", testSubject.IdentifierChainPredecessor); }