示例#1
0
        public static void OnParsedQuery(lib.sqlparser.Query q)
        {
            if (query == null)
            {
                query = q;
            }
            lock (query)
            {
                currentKeyword  = null;
                currentToken    = null;
                currentQuery    = null;
                query           = q;
                currentPosition = Math.Min(currentPosition, query.rightExtent);
                if (currentPosition > 0)
                {
                    currentQuery = query.GetQueryAtOffset(currentPosition);
                    if (currentQuery != null)
                    {
                        currentToken = currentQuery.tokens.GetTokenBeforeOrAtRandomOffset(currentPosition);
                        if (currentToken != null)
                        {
                            currentKeyword = currentToken.GetParentPrimaryKeyword();
                        }
                    }
                }

                A.db.ClearActiveObjects();
                foreach (Table table in query.allTables.tokens)
                {
                    if (table.tableAlias != null && S.Get("RememberAliases", true))
                    {
                        A.db.AliasUsed(table.tableAlias, table.name);
                    }
                    A.db.TableUsed(table.name);
                }

                foreach (Column column in query.allColumns.tokens)
                {
                    if (column.dbColumn != null)
                    {
                        A.db.ColumnUsed(column.dbColumn);
                    }
                }

                A.db.SortObjects();

                if (S.Get("QuerySuggestions", true))
                {
                    suggestionsDirty = true;
                }

                T.Debug("currentQuery: " + (currentQuery == null ? "" : currentQuery.debugText));
                T.Debug("currentToken: " + (currentToken == null ? "" : currentToken.debugText));
                T.Debug("currentKeyword: " + (currentKeyword == null ? "" : currentKeyword.debugText));
            }
        }
示例#2
0
        public void UpdateTree(lib.sqlparser.Query q)
        {
            int prevExpandedLevel = maxExpandedLevel;

            maxLevels        = 0;
            maxExpandedLevel = -1;
            minExpandedLevel = 99;
            nodesAdded.Clear();
            Nodes.Clear();
            q.Accept(this);
            this.ExpandToLevel(T.MinMax(0, maxLevels, prevExpandedLevel));
        }
示例#3
0
 public static void Clear()
 {
     fp.lib.sqlparser.Query.columnHints.Clear();
     query           = null;
     queryExpression = "";
     queryQueued     = false;
     currentKeyword  = null;
     currentQuery    = null;
     if (A.db != null)
     {
         A.db.ClearActiveObjects();
     }
     lastParse = 0;
 }
示例#4
0
 public void AddTables(DbColumn dbColumn)
 {
     if (dbColumn != null)
     {
         lib.sqlparser.Query tryQuery = lib.sqlparser.Query.Parse(A.db, editor.Text, false);
         if (tryQuery != null)
         {
             SqlBuilder b = new SqlBuilder(tryQuery);
             b.AddTable(dbColumn.table, suggestionList.includeAliases);
             string sql = b.Render();
             editor.Text = sql;
         }
     }
 }
示例#5
0
        public static void Parse(bool allowCrash)
        {
            lastParse   = Environment.TickCount;
            queryQueued = false;
            A.AddToLog("parsing...");

            lib.sqlparser.Query tryQuery = lib.sqlparser.Query.Parse(A.db, queryExpression, allowCrash);
            if (tryQuery != null)
            {
                if (tryQuery.status == TokenStatus.Error || tryQuery.status == TokenStatus.Warning)
                {
                    foreach (string msg in tryQuery.errors)
                    {
                        A.AddToLog(msg, false, tryQuery.status == TokenStatus.Error ? MsgStatus.Error : MsgStatus.Warning);
                    }
                }
                if (tryQuery.status != TokenStatus.Error)
                {
                    OnParsedQuery(tryQuery);
                    A.AddToLog("succeeded");
                    onParsed();
                }
            }
        }
示例#6
0
 public QuerySuggestions(lib.sqlparser.Query q)
 {
     query = q;
 }