/SharedLibs/Sources/managedesent-61618/Pixie/SqlParser.cs
C# | 354 lines | 324 code | 19 blank | 11 comment | 10 complexity | bdabe62690d4a8bb9cd6cc077b6e9720 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, Apache-2.0, BSD-3-Clause
- // This code was generated by the Gardens Point Parser Generator
- // Copyright (c) Wayne Kelly, QUT 2005-2008
- // (see accompanying GPPGcopyright.rtf)
-
- // GPPG version 1.3.1.136 (2008-11-11)
- // Machine: TITAN
- // DateTime: 1/25/2009 9:29:05 PM
- // UserName: Laurion
- // Input file <SqlParser.y>
-
- // options: no-lines gplex
-
- using System.Collections.Generic;
- using gppg;
-
- namespace Microsoft.Isam.Esent.Sql.Parsing
- {
- internal enum Tokens {error=48,
- EOF=49,NAME=50,STRING=51,INTEGER=52,REAL_NUMBER=53,OR=54,
- AND=55,NOT=56,COMPARISON=57,UMINUS=58,ATTACH=59,CREATE=60,
- DATABASE=61,DETACH=62,INDEX=63,TABLE=64,BEGIN=65,COMMIT=66,
- END=67,TRANSACTION=68,ROLLBACK=69,TO=70,SAVEPOINT=71,RELEASE=72,
- BOOL=73,BYTE=74,SHORT=75,INT=76,LONG=77,TEXT=78,
- BINARY=79,DATETIME=80,GUID=81,INSERT=82,INTO=83,VALUES=84};
-
- internal partial struct ValueType
- {
- internal string name;
- internal string stringValue;
- internal long intValue;
- internal double realValue;
- internal object value;
-
- internal ColumnType coltyp;
- internal ColumnDefinition columndef;
- internal List<ColumnDefinition> columndefs;
-
- internal List<string> columnNames;
- internal List<object> columnValues;
- }
- // Abstract base class for GPLEX scanners
- internal abstract class ScanBase : IScanner<ValueType,LexLocation> {
- private LexLocation __yylloc = new LexLocation();
- public override LexLocation yylloc { get { return __yylloc; } set { __yylloc = value; } }
- protected virtual bool yywrap() { return true; }
- }
-
- internal partial class Parser: ShiftReduceParser<ValueType, LexLocation>
- {
- private Dictionary<int, string> aliasses = null;
-
- protected override void Initialize()
- {
- this.errToken = (int)Tokens.error;
- this.eofToken = (int)Tokens.EOF;
-
- states=new State[83];
- AddState(0,new State(new int[]{60,4,59,30,62,34,65,38,66,42,67,44,69,47,71,55,72,58,82,62,49,82},new int[]{-1,1,-3,3,-4,29,-5,33,-6,36,-7,37,-8,41,-9,46,-10,54,-11,57,-12,61,-13,81}));
- AddState(1,new State(new int[]{49,2}));
- AddState(2,new State(-1));
- AddState(3,new State(-2));
- AddState(4,new State(new int[]{61,5,64,8}));
- AddState(5,new State(new int[]{51,7},new int[]{-14,6}));
- AddState(6,new State(-14));
- AddState(7,new State(-51));
- AddState(8,new State(new int[]{50,28},new int[]{-15,9}));
- AddState(9,new State(new int[]{40,10}));
- AddState(10,new State(new int[]{50,26},new int[]{-16,11,-17,27,-18,15}));
- AddState(11,new State(new int[]{41,12,44,13}));
- AddState(12,new State(-17));
- AddState(13,new State(new int[]{50,26},new int[]{-17,14,-18,15}));
- AddState(14,new State(-19));
- AddState(15,new State(new int[]{73,17,74,18,75,19,76,20,77,21,78,22,79,23,80,24,81,25},new int[]{-19,16}));
- AddState(16,new State(-20));
- AddState(17,new State(-21));
- AddState(18,new State(-22));
- AddState(19,new State(-23));
- AddState(20,new State(-24));
- AddState(21,new State(-25));
- AddState(22,new State(-26));
- AddState(23,new State(-27));
- AddState(24,new State(-28));
- AddState(25,new State(-29));
- AddState(26,new State(-50));
- AddState(27,new State(-18));
- AddState(28,new State(-49));
- AddState(29,new State(-3));
- AddState(30,new State(new int[]{61,31}));
- AddState(31,new State(new int[]{51,7},new int[]{-14,32}));
- AddState(32,new State(-15));
- AddState(33,new State(-4));
- AddState(34,new State(new int[]{61,35}));
- AddState(35,new State(-16));
- AddState(36,new State(-5));
- AddState(37,new State(-6));
- AddState(38,new State(new int[]{68,40,49,-31},new int[]{-20,39}));
- AddState(39,new State(-30));
- AddState(40,new State(-32));
- AddState(41,new State(-7));
- AddState(42,new State(new int[]{68,40,49,-31},new int[]{-20,43}));
- AddState(43,new State(-33));
- AddState(44,new State(new int[]{68,40,49,-31},new int[]{-20,45}));
- AddState(45,new State(-34));
- AddState(46,new State(-8));
- AddState(47,new State(new int[]{68,40,70,-31,49,-31},new int[]{-20,48}));
- AddState(48,new State(new int[]{70,49,49,-35}));
- AddState(49,new State(new int[]{71,53,50,-37},new int[]{-21,50}));
- AddState(50,new State(new int[]{50,52},new int[]{-22,51}));
- AddState(51,new State(-36));
- AddState(52,new State(-52));
- AddState(53,new State(-38));
- AddState(54,new State(-9));
- AddState(55,new State(new int[]{50,52},new int[]{-22,56}));
- AddState(56,new State(-39));
- AddState(57,new State(-10));
- AddState(58,new State(new int[]{71,53,50,-37},new int[]{-21,59}));
- AddState(59,new State(new int[]{50,52},new int[]{-22,60}));
- AddState(60,new State(-40));
- AddState(61,new State(-11));
- AddState(62,new State(new int[]{83,63}));
- AddState(63,new State(new int[]{50,28},new int[]{-15,64}));
- AddState(64,new State(new int[]{40,65}));
- AddState(65,new State(new int[]{50,26},new int[]{-23,66,-18,80}));
- AddState(66,new State(new int[]{41,67,44,78}));
- AddState(67,new State(new int[]{84,68}));
- AddState(68,new State(new int[]{40,69}));
- AddState(69,new State(new int[]{51,74,52,75,53,76},new int[]{-24,70,-25,77}));
- AddState(70,new State(new int[]{41,71,44,72}));
- AddState(71,new State(-41));
- AddState(72,new State(new int[]{51,74,52,75,53,76},new int[]{-25,73}));
- AddState(73,new State(-45));
- AddState(74,new State(-46));
- AddState(75,new State(-47));
- AddState(76,new State(-48));
- AddState(77,new State(-44));
- AddState(78,new State(new int[]{50,26},new int[]{-18,79}));
- AddState(79,new State(-43));
- AddState(80,new State(-42));
- AddState(81,new State(-12));
- AddState(82,new State(-13));
-
- rules=new Rule[53];
- rules[1]=new Rule(-2, new int[]{-1,49});
- rules[2]=new Rule(-1, new int[]{-3});
- rules[3]=new Rule(-1, new int[]{-4});
- rules[4]=new Rule(-1, new int[]{-5});
- rules[5]=new Rule(-1, new int[]{-6});
- rules[6]=new Rule(-1, new int[]{-7});
- rules[7]=new Rule(-1, new int[]{-8});
- rules[8]=new Rule(-1, new int[]{-9});
- rules[9]=new Rule(-1, new int[]{-10});
- rules[10]=new Rule(-1, new int[]{-11});
- rules[11]=new Rule(-1, new int[]{-12});
- rules[12]=new Rule(-1, new int[]{-13});
- rules[13]=new Rule(-13, new int[]{49});
- rules[14]=new Rule(-3, new int[]{60,61,-14});
- rules[15]=new Rule(-4, new int[]{59,61,-14});
- rules[16]=new Rule(-5, new int[]{62,61});
- rules[17]=new Rule(-6, new int[]{60,64,-15,40,-16,41});
- rules[18]=new Rule(-16, new int[]{-17});
- rules[19]=new Rule(-16, new int[]{-16,44,-17});
- rules[20]=new Rule(-17, new int[]{-18,-19});
- rules[21]=new Rule(-19, new int[]{73});
- rules[22]=new Rule(-19, new int[]{74});
- rules[23]=new Rule(-19, new int[]{75});
- rules[24]=new Rule(-19, new int[]{76});
- rules[25]=new Rule(-19, new int[]{77});
- rules[26]=new Rule(-19, new int[]{78});
- rules[27]=new Rule(-19, new int[]{79});
- rules[28]=new Rule(-19, new int[]{80});
- rules[29]=new Rule(-19, new int[]{81});
- rules[30]=new Rule(-7, new int[]{65,-20});
- rules[31]=new Rule(-20, new int[]{});
- rules[32]=new Rule(-20, new int[]{68});
- rules[33]=new Rule(-8, new int[]{66,-20});
- rules[34]=new Rule(-8, new int[]{67,-20});
- rules[35]=new Rule(-9, new int[]{69,-20});
- rules[36]=new Rule(-9, new int[]{69,-20,70,-21,-22});
- rules[37]=new Rule(-21, new int[]{});
- rules[38]=new Rule(-21, new int[]{71});
- rules[39]=new Rule(-10, new int[]{71,-22});
- rules[40]=new Rule(-11, new int[]{72,-21,-22});
- rules[41]=new Rule(-12, new int[]{82,83,-15,40,-23,41,84,40,-24,41});
- rules[42]=new Rule(-23, new int[]{-18});
- rules[43]=new Rule(-23, new int[]{-23,44,-18});
- rules[44]=new Rule(-24, new int[]{-25});
- rules[45]=new Rule(-24, new int[]{-24,44,-25});
- rules[46]=new Rule(-25, new int[]{51});
- rules[47]=new Rule(-25, new int[]{52});
- rules[48]=new Rule(-25, new int[]{53});
- rules[49]=new Rule(-15, new int[]{50});
- rules[50]=new Rule(-18, new int[]{50});
- rules[51]=new Rule(-14, new int[]{51});
- rules[52]=new Rule(-22, new int[]{50});
-
- nonTerminals = new string[] {"", "sql", "$accept", "createdb", "attachdb",
- "detachdb", "createtable", "begin_trx", "commit_trx", "rollback_trx", "create_savepoint",
- "release_savepoint", "insert", "blank", "database", "table", "columncreate_list",
- "columncreate", "column", "data_type", "opt_transaction", "opt_savepoint",
- "savepoint", "columnname_list", "value_list", "value", };
- }
-
- protected override void DoAction(int action)
- {
- switch (action)
- {
- case 14: // createdb -> CREATE, DATABASE, database
- { this.SqlImplementation.CreateDatabase(value_stack.array[value_stack.top-1].stringValue); }
- break;
- case 15: // attachdb -> ATTACH, DATABASE, database
- { this.SqlImplementation.AttachDatabase(value_stack.array[value_stack.top-1].stringValue); }
- break;
- case 16: // detachdb -> DETACH, DATABASE
- { this.SqlImplementation.DetachDatabase(); }
- break;
- case 17: // createtable -> CREATE, TABLE, table, '(', columncreate_list, ')'
- { this.SqlImplementation.CreateTable(value_stack.array[value_stack.top-4].name, value_stack.array[value_stack.top-2].columndefs); }
- break;
- case 18: // columncreate_list -> columncreate
- {
- yyval.columndefs = new List<ColumnDefinition>();
- yyval.columndefs.Add(value_stack.array[value_stack.top-1].columndef);
- }
- break;
- case 19: // columncreate_list -> columncreate_list, ',', columncreate
- {
- yyval.columndefs = new List<ColumnDefinition>();
- yyval.columndefs.AddRange(value_stack.array[value_stack.top-3].columndefs);
- yyval.columndefs.Add(value_stack.array[value_stack.top-1].columndef);
- }
- break;
- case 20: // columncreate -> column, data_type
- {
- yyval.columndef = new ColumnDefinition(value_stack.array[value_stack.top-2].name, value_stack.array[value_stack.top-1].coltyp);
- }
- break;
- case 21: // data_type -> BOOL
- { yyval.coltyp = ColumnType.Bool; }
- break;
- case 22: // data_type -> BYTE
- { yyval.coltyp = ColumnType.Byte; }
- break;
- case 23: // data_type -> SHORT
- { yyval.coltyp = ColumnType.Int16; }
- break;
- case 24: // data_type -> INT
- { yyval.coltyp = ColumnType.Int32; }
- break;
- case 25: // data_type -> LONG
- { yyval.coltyp = ColumnType.Int64; }
- break;
- case 26: // data_type -> TEXT
- { yyval.coltyp = ColumnType.Text; }
- break;
- case 27: // data_type -> BINARY
- { yyval.coltyp = ColumnType.Binary; }
- break;
- case 28: // data_type -> DATETIME
- { yyval.coltyp = ColumnType.DateTime; }
- break;
- case 29: // data_type -> GUID
- { yyval.coltyp = ColumnType.Guid; }
- break;
- case 30: // begin_trx -> BEGIN, opt_transaction
- { this.SqlImplementation.BeginTransaction(); }
- break;
- case 33: // commit_trx -> COMMIT, opt_transaction
- { this.SqlImplementation.CommitTransaction(); }
- break;
- case 34: // commit_trx -> END, opt_transaction
- { this.SqlImplementation.CommitTransaction(); }
- break;
- case 35: // rollback_trx -> ROLLBACK, opt_transaction
- { this.SqlImplementation.RollbackTransaction(); }
- break;
- case 36: // rollback_trx -> ROLLBACK, opt_transaction, TO, opt_savepoint, savepoint
- { this.SqlImplementation.RollbackToSavepoint(value_stack.array[value_stack.top-1].name); }
- break;
- case 39: // create_savepoint -> SAVEPOINT, savepoint
- { this.SqlImplementation.CreateSavepoint(value_stack.array[value_stack.top-1].name); }
- break;
- case 40: // release_savepoint -> RELEASE, opt_savepoint, savepoint
- { this.SqlImplementation.CommitSavepoint(value_stack.array[value_stack.top-1].name); }
- break;
- case 41: // insert -> INSERT, INTO, table, '(', columnname_list, ')', VALUES, '(',
- // value_list, ')'
- {
- string tablename = value_stack.array[value_stack.top-8].name;
- string[] columnNames = value_stack.array[value_stack.top-6].columnNames.ToArray();
- object[] columnValues = value_stack.array[value_stack.top-2].columnValues.ToArray();
-
- if (columnNames.Length != columnValues.Length)
- {
- throw new EsentSqlParseException("Different number of column names and column values");
- }
-
- KeyValuePair<string, object>[] dataToSet = new KeyValuePair<string, object>[columnNames.Length];
- for (int i = 0; i < columnNames.Length; ++i)
- {
- dataToSet[i] = new KeyValuePair<string, object>( columnNames[i], columnValues[i] );
- }
-
- this.SqlImplementation.InsertRecord(tablename, dataToSet);
- }
- break;
- case 42: // columnname_list -> column
- {
- yyval.columnNames = new List<string>();
- yyval.columnNames.Add(value_stack.array[value_stack.top-1].name);
- }
- break;
- case 43: // columnname_list -> columnname_list, ',', column
- {
- yyval.columnNames = value_stack.array[value_stack.top-3].columnNames;
- yyval.columnNames.Add(value_stack.array[value_stack.top-1].name);
- }
- break;
- case 44: // value_list -> value
- {
- yyval.columnValues = new List<object>();
- yyval.columnValues.Add(value_stack.array[value_stack.top-1].value);
- }
- break;
- case 45: // value_list -> value_list, ',', value
- {
- yyval.columnValues = value_stack.array[value_stack.top-3].columnValues;
- yyval.columnValues.Add(value_stack.array[value_stack.top-1].value);
- }
- break;
- case 46: // value -> STRING
- { yyval.value = value_stack.array[value_stack.top-1].stringValue; }
- break;
- case 47: // value -> INTEGER
- { yyval.value = value_stack.array[value_stack.top-1].intValue; }
- break;
- case 48: // value -> REAL_NUMBER
- { yyval.value = value_stack.array[value_stack.top-1].realValue; }
- break;
- }
- }
-
- protected override string TerminalToString(int terminal)
- {
- if (aliasses != null && aliasses.ContainsKey(terminal))
- return aliasses[terminal];
- else if (((Tokens)terminal).ToString() != terminal.ToString())
- return ((Tokens)terminal).ToString();
- else
- return CharToString((char)terminal);
- }
-
-
- }
- }