示例#1
0
        public static DataType RefType(Token tokRef, ObjectName objRef, bool rowType, bool extRef)
        {
            if (extRef)
                throw new NotSupportedException();

            if (objRef == null && tokRef != null)
                objRef = ObjectName(tokRef.image);

            return rowType ? (DataType) PrimitiveTypes.RowType(objRef) : PrimitiveTypes.ColumnType(objRef);
        }
示例#2
0
 public PlSql(System.IO.TextReader stream)
 {
     mcc_input_stream = new SimpleCharStream(stream, 1, 1);
     token_source = new PlSqlTokenManager(mcc_input_stream);
     token = new Token();
     mcc_ntk = -1;
     mcc_gen = 0;
     for (int i = 0; i < 239; i++) mcc_la1[i] = -1;
     for (int i = 0; i < mcc_2_rtns.Length; i++) mcc_2_rtns[i] = new MccCalls();
 }
示例#3
0
        public static DataType PrimitiveType(SqlType sqlType, Token sizeToken, Token scaleToken)
        {
            int size = -1;
            byte scale = 0;
            if (sizeToken != null) {
                if (!Int32.TryParse(sizeToken.image, out size))
                    throw new ParseException();
            }
            if (scaleToken != null) {
                if (!Byte.TryParse(scaleToken.image, out scale))
                    throw new ParseException();
            }

            return PrimitiveTypes.Type(sqlType, size, scale);
        }
示例#4
0
文件: Util.cs 项目: ikvm/deveelsql
 public static String MakeLabel(Token start, Token end)
 {
     StringBuilder buf = new StringBuilder();
     Token t = start.next;
     bool last_letter = false;
     while (t != end) {
         bool is_letter_token = Char.IsLetter(t.image[0]);
         if (is_letter_token) {
             if (last_letter) {
                 buf.Append(' ');
             }
             last_letter = true;
         } else {
             last_letter = false;
         }
         buf.Append(t.image);
         t = t.next;
     }
     buf.Append(t.image);
     return buf.ToString();
 }
示例#5
0
文件: Util.cs 项目: ikvm/deveelsql
        public static String AsNonQuotedRef(Token token)
        {
            if (token.kind == SqlParserConstants.QUOTED_VARIABLE)
                // Strip " from start and end if a quoted variable
                return token.image.Substring(1, token.image.Length - 2);

            if (token.kind == SqlParserConstants.QUOTED_DELIMINATED_REF ||
                token.kind == SqlParserConstants.QUOTEDGLOBVARIABLE) {
                // Remove all " from the string
                string image = token.image;
                StringBuilder b = new StringBuilder();
                int sz = image.Length;
                for (int i = 0; i < sz; ++i) {
                    char c = image[i];
                    if (c != '\"') {
                        b.Append(c);
                    }
                }
                return b.ToString();
            }

            return token.image;
        }
示例#6
0
 private bool mcc_3_59()
 {
     if (mcc_3R_66()) return true;
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_3R_261()) mcc_scanpos = xsp;
     return false;
 }
示例#7
0
 public PlSql(PlSqlTokenManager tm)
 {
     token_source = tm;
     token = new Token();
     mcc_ntk = -1;
     mcc_gen = 0;
     for (int i = 0; i < 239; i++) mcc_la1[i] = -1;
     for (int i = 0; i < mcc_2_rtns.Length; i++) mcc_2_rtns[i] = new MccCalls();
 }
示例#8
0
 private bool mcc_3_54()
 {
     if (mcc_3R_66()) return true;
     Token xsp;
     while (true) {
       xsp = mcc_scanpos;
       if (mcc_3R_213()) { mcc_scanpos = xsp; break; }
     }
     return false;
 }
示例#9
0
 private bool mcc_3_56()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_3R_77()) mcc_scanpos = xsp;
     xsp = mcc_scanpos;
     if (mcc_3_55()) {
     mcc_scanpos = xsp;
     if (mcc_3R_78()) return true;
     }
     return false;
 }
示例#10
0
文件: Util.cs 项目: ikvm/deveelsql
 public static SqlObject ParseNumberToken(Token token, bool negative)
 {
     if (negative)
         return new SqlObject(BigNumber.Parse("-" + token.image));
     return new SqlObject(BigNumber.Parse(token.image));
 }
示例#11
0
 private bool mcc_3R_96()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_3R_121()) {
     mcc_scanpos = xsp;
     if (mcc_3_27()) return true;
     }
     return false;
 }
示例#12
0
 private bool mcc_3_36()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_3R_69()) mcc_scanpos = xsp;
     if (mcc_3R_70()) return true;
     return false;
 }
示例#13
0
 private bool mcc_scan_token(int kind)
 {
     if (mcc_scanpos == mcc_lastpos) {
       mcc_la--;
       if (mcc_scanpos.next == null) {
     mcc_lastpos = mcc_scanpos = mcc_scanpos.next = token_source.GetNextToken();
       } else {
     mcc_lastpos = mcc_scanpos = mcc_scanpos.next;
       }
     } else {
       mcc_scanpos = mcc_scanpos.next;
     }
     if (mcc_rescan) {
       int i = 0; Token tok = token;
       while (tok != null && tok != mcc_scanpos) { i++; tok = tok.next; }
       if (tok != null) mcc_add_error_token(kind, i);
     }
     if (mcc_scanpos.kind != kind) return true;
     if (mcc_la == 0 && mcc_scanpos == mcc_lastpos) throw mcc_ls;
     return false;
 }
示例#14
0
 private bool mcc_3_2()
 {
     Token xsp;
     xsp = mcc_scanpos;
     lookingAhead = true;
     mcc_semLA = !seeTYPE();
     lookingAhead = false;
     if (!mcc_semLA || mcc_3R_46()) {
     mcc_scanpos = xsp;
     lookingAhead = true;
     mcc_semLA = !seeTYPE();
     lookingAhead = false;
     if (!mcc_semLA || mcc_3R_47()) return true;
     }
     return false;
 }
示例#15
0
 private bool mcc_3_21()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_scan_token(144)) {
     mcc_scanpos = xsp;
     if (mcc_scan_token(116)) return true;
     }
     if (mcc_scan_token(169)) return true;
     if (mcc_3R_54()) return true;
     return false;
 }
示例#16
0
 private bool mcc_3_1()
 {
     Token xsp;
     xsp = mcc_scanpos;
     lookingAhead = true;
     mcc_semLA = seeTYPE();
     lookingAhead = false;
     if (!mcc_semLA || mcc_3R_42()) {
     mcc_scanpos = xsp;
     if (mcc_3R_43()) {
     mcc_scanpos = xsp;
     if (mcc_3R_44()) {
     mcc_scanpos = xsp;
     if (mcc_3R_45()) return true;
     }
     }
     }
     return false;
 }
示例#17
0
 private bool mcc_3R_99()
 {
     if (mcc_3R_54()) return true;
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_3R_123()) mcc_scanpos = xsp;
     if (mcc_scan_token(K_TO)) return true;
     if (mcc_3R_54()) return true;
     xsp = mcc_scanpos;
     if (mcc_3R_124()) mcc_scanpos = xsp;
     return false;
 }
示例#18
0
 private bool mcc_3R_98()
 {
     if (mcc_scan_token(K_FROM)) return true;
     if (mcc_3R_228()) return true;
     Token xsp;
     while (true) {
       xsp = mcc_scanpos;
       if (mcc_3R_229()) { mcc_scanpos = xsp; break; }
     }
     return false;
 }
示例#19
0
 private Token mcc_consume_token(int kind)
 {
     Token oldToken = null;
     if ((oldToken = token).next != null) token = token.next;
     else token = token.next = token_source.GetNextToken();
     mcc_ntk = -1;
     if (token.kind == kind) {
       mcc_gen++;
       if (++mcc_gc > 100) {
     mcc_gc = 0;
     for (int i = 0; i < mcc_2_rtns.Length; i++) {
       MccCalls c = mcc_2_rtns[i];
       while (c != null) {
     if (c.gen < mcc_gen) c.first = null;
     c = c.next;
       }
     }
       }
       return token;
     }
     token = oldToken;
     mcc_kind = kind;
     throw GenerateParseException();
 }
示例#20
0
文件: Util.cs 项目: ikvm/deveelsql
        public static TableName ParseTableName(Token token)
        {
            if (token.kind == SqlParserConstants.QUOTED_VARIABLE ||
                token.kind == SqlParserConstants.GLOBVARIABLE ||  // eg. Part.*
                token.kind == SqlParserConstants.IDENTIFIER ||
                token.kind == SqlParserConstants.DOT_DELIMINATED_REF ||
                token.kind == SqlParserConstants.QUOTED_DELIMINATED_REF) {

                return TableName.Resolve(AsNonQuotedRef(token));
            }

            return TableName.Resolve(token.image);
        }
示例#21
0
 private void mcc_rescan_token()
 {
     mcc_rescan = true;
     for (int i = 0; i < 59; i++) {
       MccCalls p = mcc_2_rtns[i];
       do {
     if (p.gen > mcc_gen) {
       mcc_la = p.arg; mcc_lastpos = mcc_scanpos = p.first;
       switch (i) {
     case 0: mcc_3_1(); break;
     case 1: mcc_3_2(); break;
     case 2: mcc_3_3(); break;
     case 3: mcc_3_4(); break;
     case 4: mcc_3_5(); break;
     case 5: mcc_3_6(); break;
     case 6: mcc_3_7(); break;
     case 7: mcc_3_8(); break;
     case 8: mcc_3_9(); break;
     case 9: mcc_3_10(); break;
     case 10: mcc_3_11(); break;
     case 11: mcc_3_12(); break;
     case 12: mcc_3_13(); break;
     case 13: mcc_3_14(); break;
     case 14: mcc_3_15(); break;
     case 15: mcc_3_16(); break;
     case 16: mcc_3_17(); break;
     case 17: mcc_3_18(); break;
     case 18: mcc_3_19(); break;
     case 19: mcc_3_20(); break;
     case 20: mcc_3_21(); break;
     case 21: mcc_3_22(); break;
     case 22: mcc_3_23(); break;
     case 23: mcc_3_24(); break;
     case 24: mcc_3_25(); break;
     case 25: mcc_3_26(); break;
     case 26: mcc_3_27(); break;
     case 27: mcc_3_28(); break;
     case 28: mcc_3_29(); break;
     case 29: mcc_3_30(); break;
     case 30: mcc_3_31(); break;
     case 31: mcc_3_32(); break;
     case 32: mcc_3_33(); break;
     case 33: mcc_3_34(); break;
     case 34: mcc_3_35(); break;
     case 35: mcc_3_36(); break;
     case 36: mcc_3_37(); break;
     case 37: mcc_3_38(); break;
     case 38: mcc_3_39(); break;
     case 39: mcc_3_40(); break;
     case 40: mcc_3_41(); break;
     case 41: mcc_3_42(); break;
     case 42: mcc_3_43(); break;
     case 43: mcc_3_44(); break;
     case 44: mcc_3_45(); break;
     case 45: mcc_3_46(); break;
     case 46: mcc_3_47(); break;
     case 47: mcc_3_48(); break;
     case 48: mcc_3_49(); break;
     case 49: mcc_3_50(); break;
     case 50: mcc_3_51(); break;
     case 51: mcc_3_52(); break;
     case 52: mcc_3_53(); break;
     case 53: mcc_3_54(); break;
     case 54: mcc_3_55(); break;
     case 55: mcc_3_56(); break;
     case 56: mcc_3_57(); break;
     case 57: mcc_3_58(); break;
     case 58: mcc_3_59(); break;
       }
     }
     p = p.next;
       } while (p != null);
     }
     mcc_rescan = false;
 }
示例#22
0
 private bool mcc_3R_91()
 {
     if (mcc_3R_119()) return true;
     Token xsp;
     while (true) {
       xsp = mcc_scanpos;
       if (mcc_3R_234()) { mcc_scanpos = xsp; break; }
     }
     return false;
 }
示例#23
0
 void CommonTokenAction(Token token)
 {
     tokenHistory.Add(token);
 }
示例#24
0
 private bool mcc_3R_89()
 {
     if (mcc_scan_token(154)) return true;
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_3R_116()) mcc_scanpos = xsp;
     if (mcc_scan_token(155)) return true;
     return false;
 }
示例#25
0
 private bool mcc_3_44()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_scan_token(8)) {
     mcc_scanpos = xsp;
     if (mcc_scan_token(5)) {
     mcc_scanpos = xsp;
     if (mcc_scan_token(154)) return true;
     }
     }
     return false;
 }
示例#26
0
 private bool mcc_3R_95()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_scan_token(5)) {
     mcc_scanpos = xsp;
     if (mcc_3R_120()) {
     mcc_scanpos = xsp;
     if (mcc_scan_token(124)) return true;
     }
     }
     return false;
 }
示例#27
0
文件: Util.cs 项目: ikvm/deveelsql
        public static object ToParamObject(Token token, bool upperIdentifiers)
        {
            if (token.kind == SqlParserConstants.STRING_LITERAL) {
                string raw_string = token.image.Substring(1, token.image.Length - 2);
                return new SqlObject(EscapeTranslated(raw_string));
            }

            if (token.kind == SqlParserConstants.BOOLEAN_LITERAL)
                return new SqlObject(token.image.ToLower(CultureInfo.InvariantCulture).Equals("true"));

            if (token.kind == SqlParserConstants.NULL_LITERAL)
                return SqlObject.Null;

            if (token.kind == SqlParserConstants.REGEX_LITERAL) {
                // Horrible hack,
                // Get rid of the 'regex' string at the start,
                String str = token.image.Substring(5).Trim();
                return new SqlObject(str);
            }
            if (token.kind == SqlParserConstants.QUOTED_VARIABLE ||
                       token.kind == SqlParserConstants.GLOBVARIABLE ||  // eg. Part.*
                       token.kind == SqlParserConstants.IDENTIFIER ||
                       token.kind == SqlParserConstants.DOT_DELIMINATED_REF ||
                       token.kind == SqlParserConstants.QUOTED_DELIMINATED_REF) {
                string name = AsNonQuotedRef(token);
                if (upperIdentifiers)
                    name = name.ToUpper(CultureInfo.InvariantCulture);

                Variable v;
                int div = name.LastIndexOf('.');
                if (div != -1) {
                    // Column represents '[something].[name]'
                    // Check if the column name is an alias.
                    String column_name = name.Substring(div + 1);
                    // Make the '[something]' into a TableName
                    TableName table_name = TableName.Resolve(name.Substring(0, div));

                    // Set the variable name
                    v = new Variable(table_name, column_name);
                } else {
                    // Column represents '[something]'
                    v = new Variable(name);
                }
                return v;
            } else {  // Otherwise it must be a reserved word, so just return the image
                // as a variable.
                string name = token.image;
                if (upperIdentifiers) {
                    name = name.ToUpper(CultureInfo.InvariantCulture);
                }
                return new Variable(name);
            }
        }
示例#28
0
 private bool mcc_3_45()
 {
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_scan_token(91)) mcc_scanpos = xsp;
     if (mcc_3R_66()) return true;
     return false;
 }
示例#29
0
文件: Util.cs 项目: ikvm/deveelsql
 public static String MakeSourceString(Token start, Token end)
 {
     StringBuilder buf = new StringBuilder();
     Token t = start.next;
     while (t != end) {
         buf.Append(t.image);
         buf.Append(' ');
         t = t.next;
     }
     buf.Append(t.image);
     return buf.ToString();
 }
示例#30
0
 private bool mcc_3_5()
 {
     if (mcc_scan_token(S_IDENTIFIER)) return true;
     Token xsp;
     xsp = mcc_scanpos;
     if (mcc_scan_token(158)) {
     mcc_scanpos = xsp;
     if (mcc_3R_49()) return true;
     }
     return false;
 }