亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dbcontextrule.java

?? 非常棒的java數(shù)據(jù)庫(kù)
?? JAVA
字號(hào):
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.server.web;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.h2.bnf.Bnf;
import org.h2.bnf.Rule;
import org.h2.bnf.Sentence;
import org.h2.command.Parser;
import org.h2.message.Message;
import org.h2.util.StringUtils;

/**
 * A BNF terminal rule that is linked to the database context information.
 * This class is used by the H2 Console, to support auto-complete.
 */
public class DbContextRule implements Rule {
    DbContents contents;
    int type;
    static final int COLUMN = 0, TABLE = 1, TABLE_ALIAS = 2;
    public static final int NEW_TABLE_ALIAS = 3;
    public static final int COLUMN_ALIAS = 4;
    private static final boolean SUGGEST_TABLE_ALIAS = false;

    DbContextRule(DbContents contents, int type) {
        this.contents = contents;
        this.type = type;
    }

    public String name() {
        return null;
    }

    public String random(Bnf config, int level) {
        return null;
    }

    public Rule last() {
        return this;
    }

    public void setLinks(HashMap ruleMap) {
    }

    public void addNextTokenList(String query, Sentence sentence) {
        switch (type) {
        case TABLE:
            addTable(query, sentence);
            break;
        case NEW_TABLE_ALIAS:
            addNewTableAlias(query, sentence);
            break;
        case TABLE_ALIAS:
            addTableAlias(query, sentence);
            break;
        case COLUMN_ALIAS:
//            addColumnAlias(query, sentence);
//            break;
        case COLUMN:
            addColumn(query, sentence);
            break;
        default:
        }
    }

    private void addTableAlias(String query, Sentence sentence) {
        String q = StringUtils.toUpperEnglish(query.trim());
        HashMap map = sentence.getAliases();
        HashSet set = new HashSet();
        if (map != null) {
            for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
                Map.Entry entry = (Entry) it.next();
                String alias = (String) entry.getKey();
                DbTableOrView table = (DbTableOrView) entry.getValue();
                set.add(StringUtils.toUpperEnglish(table.name));
                if (q.length() == 0 || alias.startsWith(q)) {
                    if (q.length() < alias.length()) {
                        sentence.add(alias + ".", alias.substring(q.length()) + ".", Sentence.CONTEXT);
                    }
                }
            }
        }
        HashSet tables = sentence.getTables();
        if (tables != null) {
            for (Iterator it = tables.iterator(); it.hasNext();) {
                DbTableOrView table = (DbTableOrView) it.next();
                String tableName = StringUtils.toUpperEnglish(table.name);
            //DbTableOrView[] tables = contents.defaultSchema.tables;
            //for(int i=0; i<tables.length; i++) {
            //    DbTableOrView table = tables[i];
            //    String tableName = StringUtils.toUpperEnglish(table.name);
                if (!set.contains(tableName)) {
                    if (q.length() == 0 || tableName.startsWith(q)) {
                        if (q.length() < tableName.length()) {
                            sentence.add(tableName + ".", tableName.substring(q.length()) + ".", Sentence.CONTEXT);
                        }
                    }
                }
            }
        }
    }

    private void addNewTableAlias(String query, Sentence sentence) {
        if (SUGGEST_TABLE_ALIAS) {
            // good when testing!
            if (query.length() > 3) {
                return;
            }
            String lastTableName = StringUtils.toUpperEnglish(sentence.getLastTable().name);
            if (lastTableName == null) {
                return;
            }
            HashMap map = sentence.getAliases();
            String shortName = lastTableName.substring(0, 1);
            if (map != null && map.containsKey(shortName)) {
                int result = 0;
                for (int i = 1;; i++) {
                    if (!map.containsKey(shortName + i)) {
                        result = i;
                        break;
                    }
                }
                shortName += result;
            }
            String q = StringUtils.toUpperEnglish(query.trim());
            if (q.length() == 0 || StringUtils.toUpperEnglish(shortName).startsWith(q)) {
                if (q.length() < shortName.length()) {
                    sentence.add(shortName, shortName.substring(q.length()), Sentence.CONTEXT);
                }
            }
        }
    }

//    private boolean startWithIgnoreCase(String a, String b) {
//        if(a.length() < b.length()) {
//            return false;
//        }
//        for(int i=0; i<b.length(); i++) {
//            if(Character.toUpperCase(a.charAt(i)) 
//                    != Character.toUpperCase(b.charAt(i))) {
//                return false;
//            }
//        }
//        return true;
//    }

    private void addTable(String query, Sentence sentence) {
        DbSchema schema = contents.defaultSchema;
        String text = StringUtils.toUpperEnglish(sentence.text).trim();
        if (text.endsWith(".")) {
            for (int i = 0; i < contents.schemas.length; i++) {
                if (text.endsWith(StringUtils.toUpperEnglish(contents.schemas[i].name) + ".")) {
                    schema = contents.schemas[i];
                    break;
                }
            }
        }
        String q = StringUtils.toUpperEnglish(query.trim());
        DbTableOrView[] tables = schema.tables;
        for (int i = 0; i < tables.length; i++) {
            DbTableOrView table = tables[i];
            if (q.length() == 0 || StringUtils.toUpperEnglish(table.name).startsWith(q)) {
                if (q.length() < table.quotedName.length()) {
                    sentence.add(table.quotedName, table.quotedName.substring(q.length()), Sentence.CONTEXT);
                }
            }
        }
    }

    private void addColumn(String query, Sentence sentence) {
        String tableName = query;
        String columnPattern = "";
        if (query.trim().length() == 0) {
            tableName = null;
            if (sentence.text.trim().endsWith(".")) {
                return;
            }
        } else {
            tableName = StringUtils.toUpperEnglish(query.trim());
            if (tableName.endsWith(".")) {
                tableName = tableName.substring(0, tableName.length() - 1);
            } else {
                columnPattern = StringUtils.toUpperEnglish(query.trim());
                tableName = null;
            }
        }
        HashSet set = null;
        HashMap aliases = sentence.getAliases();
        if (tableName == null && sentence.getTables() != null) {
            set = sentence.getTables();
        }
        DbTableOrView table = null;
        if (tableName != null && aliases != null && aliases.get(tableName) != null) {
            table = (DbTableOrView) aliases.get(tableName);
            tableName = StringUtils.toUpperEnglish(table.name);
        }
        if (tableName == null) {
            if (set == null && aliases == null) {
                return;
            }
            if ((set != null && set.size() > 1) || (aliases != null && aliases.size() > 1)) {
                return;
            }
        }
        if (table == null) {
            DbTableOrView[] tables = contents.defaultSchema.tables;
            for (int i = 0; i < tables.length; i++) {
                DbTableOrView tab = tables[i];
                String t = StringUtils.toUpperEnglish(tab.name);
                if (tableName != null && !tableName.equals(t)) {
                    continue;
                }
                if (set != null && !set.contains(tab)) {
                    continue;
                }
                table = tab;
                break;
            }
        }
        if (table != null) {
            for (int j = 0; j < table.columns.length; j++) {
                String columnName = table.columns[j].name;
                if (!StringUtils.toUpperEnglish(columnName).startsWith(columnPattern)) {
                    continue;
                }
                if (columnPattern.length() < columnName.length()) {
                    sentence.add(columnName, columnName.substring(columnPattern.length()), Sentence.CONTEXT);
                }
            }
        }
    }

    public String matchRemove(String query, Sentence sentence) {
        if (query.length() == 0) {
            return null;
        }
        String s;
        switch (type) {
        case TABLE:
            s = matchTable(query, sentence);
            break;
        case NEW_TABLE_ALIAS:
            s = matchTableAlias(query, sentence, true);
            break;
        case TABLE_ALIAS:
            s = matchTableAlias(query, sentence, false);
            break;
        case COLUMN_ALIAS:
            s = matchColumnAlias(query, sentence, false);
            break;
        case COLUMN:
            s = matchColumn(query, sentence);
            break;
        default:
            throw Message.getInternalError("type=" + type);
        }
        return s;
    }

    public String matchTable(String query, Sentence sentence) {
        String up = StringUtils.toUpperEnglish(query);
        DbTableOrView[] tables = contents.defaultSchema.tables;
        String best = null;
        DbTableOrView bestTable = null;
        for (int i = 0; i < tables.length; i++) {
            DbTableOrView table = tables[i];
            String tableName = StringUtils.toUpperEnglish(table.name);
            if (up.startsWith(tableName)) {
                if (best == null || tableName.length() > best.length()) {
                    best = tableName;
                    bestTable = table;
                }
            }
        }
        if (best == null) {
            return null;
        }
        sentence.addTable(bestTable);
        query = query.substring(best.length());
        // while(query.length()>0 && Character.isWhitespace(query.charAt(0))) {
        // query = query.substring(1);
        // }
        return query;
    }

    public String matchColumnAlias(String query, Sentence sentence, boolean add) {
        String up = StringUtils.toUpperEnglish(query);
        int i = 0;
        if (query.indexOf(' ') < 0) {
            return null;
        }
        for (; i < up.length(); i++) {
            char ch = up.charAt(i);
            if (ch != '_' && !Character.isLetterOrDigit(ch)) {
                break;
            }
        }
        if (i == 0) {
            return null;
        }
        String alias = up.substring(0, i);
        if (Parser.isKeyword(alias)) {
            return null;
        }
        return query.substring(alias.length());
    }

    public String matchTableAlias(String query, Sentence sentence, boolean add) {
        String up = StringUtils.toUpperEnglish(query);
        int i = 0;
        if (query.indexOf(' ') < 0) {
            return null;
        }
        for (; i < up.length(); i++) {
            char ch = up.charAt(i);
            if (ch != '_' && !Character.isLetterOrDigit(ch)) {
                break;
            }
        }
        if (i == 0) {
            return null;
        }
        String alias = up.substring(0, i);
        if (Parser.isKeyword(alias)) {
            return null;
        }
        if (add) {
            sentence.addAlias(alias, sentence.getLastTable());
        }
        HashMap map = sentence.getAliases();
        if ((map != null && map.containsKey(alias)) || (sentence.getLastTable() == null)) {
            if (add && query.length() == alias.length()) {
                return query;
            }
            query = query.substring(alias.length());
            return query;
        } else {
            HashSet tables = sentence.getTables();
            if (tables != null) {
                String best = null;
                for (Iterator it = tables.iterator(); it.hasNext();) {
                    DbTableOrView table = (DbTableOrView) it.next();
                    String tableName = StringUtils.toUpperEnglish(table.name);
                //DbTableOrView[] tables = contents.defaultSchema.tables;
                //for(int i=0; i<tables.length; i++) {
                //    DbTableOrView table = tables[i];
                //    String tableName = StringUtils.toUpperEnglish(table.name);
                    if (alias.startsWith(tableName) && (best == null || tableName.length() > best.length())) {
                        best = tableName;
                    }
                }
                if (best != null) {
                    query = query.substring(best.length());
                    return query;
                }
            }
            return null;
        }
    }

    public String matchColumn(String query, Sentence sentence) {
        String up = StringUtils.toUpperEnglish(query);
        HashSet set = sentence.getTables();
        DbTableOrView[] tables = contents.defaultSchema.tables;
        String best = null;
        for (int i = 0; i < tables.length; i++) {
            DbTableOrView table = tables[i];
            if (set != null && !set.contains(table)) {
                continue;
            }
            if (table == null || table.columns == null) {
                continue;
            }
            for (int j = 0; j < table.columns.length; j++) {
                String name = StringUtils.toUpperEnglish(table.columns[j].name);
                if (up.startsWith(name)) {
                    String b = query.substring(name.length());
                    if (best == null || b.length() < best.length()) {
                        best = b;
                    }
                }
            }
        }
        return best;
    }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美乱综合| 日韩高清一区在线| 91精品欧美久久久久久动漫| 国产一区二区三区免费看| 亚洲欧美一区二区三区极速播放| 91精品一区二区三区久久久久久| 成人免费av资源| 蜜臀久久99精品久久久画质超高清| 国产精品毛片a∨一区二区三区| 欧美伊人久久大香线蕉综合69| 国产传媒一区在线| 天天做天天摸天天爽国产一区| 中文字幕一区在线观看视频| 日韩欧美国产综合| 欧美日韩视频第一区| 91在线精品一区二区| 韩国成人精品a∨在线观看| 五月天视频一区| 亚洲精品伦理在线| 中文字幕一区二区三区色视频| 日韩免费一区二区| 欧美二区三区91| 欧美在线免费播放| 91麻豆精品一区二区三区| 国产精品1区2区3区| 轻轻草成人在线| 亚洲成av人在线观看| 亚洲免费在线视频一区 二区| 国产欧美精品在线观看| 久久免费视频一区| 精品人在线二区三区| 91麻豆精品国产无毒不卡在线观看 | 日本一区二区三区dvd视频在线 | 欧美国产精品中文字幕| 久久久久久久久久久久久女国产乱 | 久久激五月天综合精品| 日韩精彩视频在线观看| 亚洲一区二区三区美女| 亚洲欧美一区二区三区久本道91| 国产日韩v精品一区二区| 久久综合久久综合九色| 26uuu欧美| 欧美mv日韩mv国产| 日韩精品最新网址| 精品国产一区久久| 久久久久青草大香线综合精品| 欧美tickling挠脚心丨vk| 日韩欧美黄色影院| 久久久综合网站| 亚洲国产精品传媒在线观看| 国产日产欧产精品推荐色| 欧美国产精品专区| 亚洲日本青草视频在线怡红院| 亚洲欧美日韩国产中文在线| 一区二区在线观看视频| 亚洲成av人影院| 久久99精品久久久| 国产成人av一区二区三区在线观看| 懂色一区二区三区免费观看| 99久久伊人网影院| 欧美无砖砖区免费| 欧美一激情一区二区三区| 久久这里只有精品首页| 国产精品视频yy9299一区| 亚洲日穴在线视频| 天天综合网 天天综合色| 久久精品久久久精品美女| 国产大陆a不卡| 一本色道a无线码一区v| 在线成人av网站| 久久久久久97三级| 亚洲精品伦理在线| 久久精品国产一区二区三 | 欧美日韩久久久久久| 日韩免费在线观看| 国产精品久久久久久久午夜片| 一区二区三区四区精品在线视频 | 国产精品色哟哟网站| 亚洲一二三区在线观看| 久久超碰97人人做人人爱| 国产成人8x视频一区二区 | 日本一区二区综合亚洲| 一区二区三区丝袜| 精品一区二区在线观看| 91美女片黄在线| 日韩欧美一区在线| 日韩毛片精品高清免费| 麻豆精品视频在线观看免费 | 激情久久久久久久久久久久久久久久| 成人在线综合网| 在线不卡中文字幕播放| 国产精品美女久久久久久久久久久 | 国产精品久久久久影院亚瑟| 亚洲成人av免费| 成人黄色777网| 欧美精品在线观看播放| 中文字幕不卡三区| 日本色综合中文字幕| 99久久精品国产网站| 欧美本精品男人aⅴ天堂| 亚洲乱码日产精品bd | 91黄色免费看| 久久久噜噜噜久久中文字幕色伊伊 | 91精品一区二区三区久久久久久| 欧美国产一区在线| 日本不卡视频一二三区| 色八戒一区二区三区| 欧美国产亚洲另类动漫| 久久99精品国产91久久来源| 在线观看欧美日本| 中文字幕日韩精品一区| 韩国精品主播一区二区在线观看| 欧美日韩综合不卡| 亚洲欧美激情小说另类| 国产91精品一区二区麻豆网站| 欧美精品在线一区二区| 亚洲自拍偷拍综合| 99久久伊人精品| 欧美激情综合五月色丁香小说| 免费人成网站在线观看欧美高清| 在线观看av一区二区| 亚洲日本va午夜在线影院| 成人一道本在线| 日本一区二区视频在线观看| 国模一区二区三区白浆| 日韩免费性生活视频播放| 日韩中文字幕亚洲一区二区va在线 | 亚洲成人av福利| 欧洲生活片亚洲生活在线观看| 国产精品国产自产拍高清av王其 | 麻豆专区一区二区三区四区五区| 欧美美女网站色| 洋洋av久久久久久久一区| 91麻豆福利精品推荐| 中文字幕在线不卡国产视频| 不卡一卡二卡三乱码免费网站| 久久久久久久精| 国产不卡在线一区| 国产精品视频看| 99国内精品久久| 亚洲视频在线观看三级| 色综合天天综合网天天狠天天 | 色婷婷av一区二区| 亚洲精品国产无天堂网2021 | 欧美在线视频不卡| 亚洲第一精品在线| 欧美喷潮久久久xxxxx| 午夜精品福利视频网站| 6080日韩午夜伦伦午夜伦| 免费欧美日韩国产三级电影| 日韩欧美精品在线| 国产91在线|亚洲| 韩国中文字幕2020精品| 精品久久久久av影院| 国精产品一区一区三区mba视频 | 夜夜精品浪潮av一区二区三区| 欧美亚洲国产一区在线观看网站 | 免费在线一区观看| 久久在线免费观看| 99精品一区二区三区| 一区二区在线电影| 欧美一区二区三区成人| 久久99热狠狠色一区二区| 国产亚洲一二三区| 在线亚洲高清视频| 免费成人性网站| 国产精品无码永久免费888| 91国内精品野花午夜精品 | 99精品视频一区| 午夜视频一区二区| 久久久久久久久久久久久久久99| 99国产欧美久久久精品| 午夜精品在线看| 国产日韩精品一区二区三区在线| 色吊一区二区三区| 国模娜娜一区二区三区| 亚洲欧美另类综合偷拍| 欧美一区二区成人| jlzzjlzz欧美大全| 日本不卡一区二区三区| 亚洲国产精品成人综合| 欧美日韩在线播放| 国产福利一区二区三区在线视频| 亚洲精品高清视频在线观看| 欧美变态tickle挠乳网站| 91免费在线视频观看| 精品一区二区三区在线观看| 亚洲欧洲日韩在线| 日韩一区二区麻豆国产| 不卡区在线中文字幕| 免费观看30秒视频久久| 亚洲啪啪综合av一区二区三区| 欧美xxxxxxxx| 欧美亚洲丝袜传媒另类| 成人网在线播放| 青青国产91久久久久久| 自拍偷拍亚洲综合| 久久婷婷综合激情| 欧美福利电影网| 色哟哟一区二区|