GraphView.GraphViewParser.ParseCreateNodeEdgeViewStatement C# (CSharp) Method

ParseCreateNodeEdgeViewStatement() public method

public ParseCreateNodeEdgeViewStatement ( string query, IList &errors ) : WSqlFragment
query string
errors IList
return WSqlFragment
        public WSqlFragment ParseCreateNodeEdgeViewStatement(string query, out IList<ParseError> errors)
        {
            var tsqlParser = new TSql110Parser(true);
            var sr = new StringReader(query);
            var tokens = new List<TSqlParserToken>(tsqlParser.GetTokenStream(sr, out errors));
            if (errors.Count > 0)
            {
                return null;
            }
            int currentToken = 0;
            int farestError = 0;
            while (currentToken < tokens.Count)
            {
                int nextToken = currentToken;
                if (ReadToken(tokens, "create", ref nextToken, ref farestError))
                {
                    int pos = nextToken;
                    if (ReadToken(tokens, "node", ref nextToken, ref farestError))
                    {
                        tokens[pos].TokenType = TSqlTokenType.MultilineComment;
                        tokens[pos].Text = "/*__GRAPHVIEW_CREATE_NODEVIEW*/";
                    }
                    else if (ReadToken(tokens, "edge", ref nextToken, ref farestError))
                    {
                        tokens[pos].TokenType = TSqlTokenType.MultilineComment;
                        tokens[pos].Text = "/*__GRAPHVIEW_CREATE_EDGEVIEW*/";
                    }
                    else
                    {
                        var error = tokens[farestError];
                        throw new SyntaxErrorException(error.Line, error.Text);
                        //errors.Add(new ParseError(0, error.Offset, error.Line, error.Column,
                        //    string.Format("Incorrect syntax near {0}", error.Text)));
                    }
                }
                currentToken++;
            }

            var parser = new WSqlParser();
            var fragment = parser.Parse(tokens, out errors) as WSqlScript;
            if (errors.Count > 0)
                return null;
            return fragment;
        }

Usage Example

示例#1
0
文件: View.cs 项目: Coword/GraphView
        /// <summary>
        /// Creates Edge View using CREATE EDGE VIEW statement
        /// </summary>
        /// <param name="query"></param>
        public void CreateEdgeView(string query)
        {
            IList<ParseError> errors;
            var parser = new GraphViewParser();
            var script = parser.ParseCreateNodeEdgeViewStatement(query, out errors) as WSqlScript;
            if (errors.Count > 0)
                throw new SyntaxErrorException(errors);

            if (script == null || script.Batches.Count == 0)
            {
                throw new SyntaxErrorException("Invalid CREATE VIEW statement.");
            }

            var statement = script.Batches[0].Statements[0] as WCreateViewStatement;
            if (statement == null)
                throw new SyntaxErrorException("Not a CREATE VIEW statement");
            var edgeViewObjectName = statement.SchemaObjectName;
            string schema = edgeViewObjectName.DatabaseIdentifier == null
                ? "dbo"
                : edgeViewObjectName.DatabaseIdentifier.Value;
            if (edgeViewObjectName.SchemaIdentifier == null)
                throw new SyntaxErrorException(
                    "Source node type should be specified. Format: <Node name>.<Edgeview Name>");
            string nodeName = edgeViewObjectName.SchemaIdentifier.Value;
            string edgeViewName = edgeViewObjectName.BaseIdentifier.Value;
            var visitor = new EdgeViewSelectStatementVisitor();
            List<Tuple<string, string>> edges;
            List<string> edgeAttribute;
            List<Tuple<string, List<Tuple<string, string, string>>>> attributeMapping;
            visitor.Invoke(schema, statement.SelectStatement, out edges, out edgeAttribute, out attributeMapping);
            CreateEdgeView(schema, nodeName, edgeViewName, edges, edgeAttribute, null, attributeMapping);
            statement.SchemaObjectName =
                new WSchemaObjectName(new Identifier
                {
                    Value = string.Format("{0}_{1}_{2}_Sampling", schema, nodeName, edgeViewName)
                });
            string a = statement.ToString();
            //ExecuteNonQuery(statement.ToString());

        }
All Usage Examples Of GraphView.GraphViewParser::ParseCreateNodeEdgeViewStatement