Esempio n. 1
0
        public object VisitEmbeddedVariableNode(EmbeddedVariableNode node, Context parameter)
        {
            var location = node.Location;
            var name     = node.VariableName;

            if (!_valueObjects.ContainsKey(name))
            {
                throw new ArgumentException($"Invalid argument found {name}");
            }
            var value = _propertyValues[name];

            //var isValid = _evaluator.Evaluate(name, _propertyValues);
            if (value != null && value.Value != null)
            {
                var fragment = value.Value.ToString();
                if (fragment.IndexOf('\'') > -1)
                {
                    throw new SqlBuildException(ExceptionMessageId.Esp2116, location.Sql, location.LineNumber,
                                                location.Position, node.Text);
                }

                if (fragment.IndexOf(';') > -1)
                {
                    throw new SqlBuildException(ExceptionMessageId.Esp2117, location.Sql, location.LineNumber,
                                                location.Position, node.Text);
                }

                if (fragment.IndexOf("--", StringComparison.Ordinal) > -1)
                {
                    throw new SqlBuildException(ExceptionMessageId.Esp2122, location.Sql, location.LineNumber,
                                                location.Position, node.Text);
                }

                if (fragment.IndexOf("/*", StringComparison.Ordinal) > -1)
                {
                    throw new SqlBuildException(ExceptionMessageId.Esp2123, location.Sql, location.LineNumber,
                                                location.Position, node.Text);
                }

                if (!StartWithClauseKeyword(fragment))
                {
                    parameter.IsAvailable = true;
                }

                parameter.AppendRawSql(fragment);
                parameter.AppendFormattedSql(fragment);
            }

            foreach (var child in node.Children)
            {
                child.Accept(this, parameter);
            }

            return(null);
        }
Esempio n. 2
0
        private void ParseEmbeddedVariableBlockComment()
        {
            var variableName = SqlTokenHelper.Extract(_tokenType, _token);

            if (string.IsNullOrEmpty(variableName))
            {
                throw new SqlParseException(ExceptionMessageId.Esp2121, _sql, _tokenizer.LineNumber,
                                            _tokenizer.Position, _token);
            }

            var node = new EmbeddedVariableNode(Location, variableName, _token);

            AppendNode(node);
            _nodeStack.Push(node);
        }