예제 #1
0
 public SqlGenerator(ISessionFactoryImplementor sfi, ITreeNodeStream input)
     : this(input)
 {
     parseErrorHandler = new ErrorCounter();
     sessionFactory = sfi;
     writer = new DefaultWriter(this);
 }
예제 #2
0
        void ISqlElement.ToString(ISqlWriter writer)
        {
            writer.Write(Expression);

            writer.Write(" ");
            writer.Write(Ascending ? "ASC" : "DESC");
        }
예제 #3
0
 public void TestSetup()
 {
     _service = new SqlCeSchemaService {ProviderName = _providerName};
     _model = _service.GetDbObjectModel(_connStr);
     _sqlSW = new StringWriter();
     _sqlWriter = new SqlWriter();
 }
예제 #4
0
 public static void Deindent(this ISqlWriter writer, int value)
 {
     if (writer.Indentation - value >= 0)
     {
         writer.Indentation = writer.Indentation - value;
     }
 }
예제 #5
0
 public SqlGenerator(ISessionFactoryImplementor sfi, ITreeNodeStream input)
     : this(input)
 {
     parseErrorHandler = new ErrorCounter();
     sessionFactory    = sfi;
     writer            = new DefaultWriter(this);
 }
예제 #6
0
        void ISqlElement.ToString(ISqlWriter writer)
        {
            writer.Write(Expression);

            writer.Write(" ");
            writer.Write(Ascending ? "ASC" : "DESC");
        }
예제 #7
0
        private void EndQuery()
        {
            SqlString sqlString = GetSqlStringWithLimitsIfNeeded((QueryWriter)writer);

            writer = outputStack[0];
            outputStack.RemoveAt(0);
            Out(sqlString);
        }
예제 #8
0
        void ISqlElement.ToString(ISqlWriter writer)
        {
            writer.Write("SELECT ");
            if (Into != null)
            {
                writer.Write("INTO ");
                // TODO:

                writer.WriteLine();
            }
            else
            {
                var colCount = Columns.Count;
                int i        = -1;
                foreach (var column in Columns)
                {
                    writer.Write(column);

                    if (++i < colCount - 1)
                    {
                        writer.Write(", ");
                    }
                }

                if (colCount > 0)
                {
                    writer.WriteLine();
                }
            }

            if (From != null)
            {
                writer.Indent(4);
                writer.Write(From);
                writer.WriteLine();
                writer.Deindent(4);
            }

            if (Where != null)
            {
                writer.Indent(4);
                writer.Write("WHERE ");
                writer.Write(Where);
                writer.WriteLine();
                writer.Deindent(4);
            }

            if (Having != null)
            {
                writer.Indent(4);
                writer.Write("HAVING ");
                writer.Write(Having);
                writer.WriteLine();
                writer.Deindent(4);
            }
        }
예제 #9
0
        void ISqlElement.ToString(ISqlWriter writer)
        {
            writer.Write(Expression);

            if (Alias != null)
            {
                writer.Write(" AS ");
                writer.Write(Alias);
            }
        }
예제 #10
0
        private void BeginBitwiseOp(string op)
        {
            var function = sessionFactory.SQLFunctionRegistry.FindSQLFunction(op);

            if (function == null)
            {
                return;
            }

            outputStack.Insert(0, writer);
            writer = new BitwiseOpWriter();
        }
예제 #11
0
        /// <summary>The get summary.</summary>
        /// <param name="column">The column.</param>
        /// <returns>The get summary.</returns>
        private string GetSummary(DbModelColumn column)
        {
            StringWriter stringWriter = new StringWriter();

            if (_sqlWriter == null)
            {
                _sqlWriter = _services.Resolve <ISqlWriter>();
            }

            _sqlWriter.WriteSummary(stringWriter, column);
            return(stringWriter.ToString());
        }
예제 #12
0
        public static string GetPropertyNameWithIdentifierFromExpression <TData>(this ISqlWriter <TData> serverWriter, Expression expression)
        {
            var exp = expression.GetMemberExpression();

            if (!(exp is MemberExpression))
            {
                return(string.Empty);
            }
            var table  = EntityTableCacheHelper.TryGetTable(((MemberExpression)exp).Expression.Type);
            var member = ((MemberExpression)exp).Member;

            return($"{table.Identifier}.{serverWriter.StartQuotationMark}{table.Columns[member.Name].ColumnName}{serverWriter.EndQuotationMark}");
        }
예제 #13
0
        protected override void WriteTo(ISqlWriter writer)
        {
            writer.Write("CASE ");
            writer.Write(IfTrue);
            writer.Write(" WHEN ");
            writer.Write(Test);

            if (IfFalse != null) {
                writer.Write(" THEN ");
                writer.Write(IfFalse);
            }

            writer.Write(" END");
        }
예제 #14
0
        private void EndQuery()
        {
            QueryWriter queryWriter = ((QueryWriter)writer);
            SqlString   sqlString   = queryWriter.ToSqlString();

            if (queryWriter.Take.HasValue || queryWriter.Skip.HasValue)
            {
                sqlString = sessionFactory.Dialect.GetLimitString(sqlString, queryWriter.Skip ?? 0, queryWriter.Take ?? int.MaxValue);
            }

            writer = outputStack[0];
            outputStack.RemoveAt(0);
            Out(sqlString);
        }
예제 #15
0
        protected override void WriteTo(ISqlWriter writer)
        {
            writer.Write("CASE ");
            writer.Write(IfTrue);
            writer.Write(" WHEN ");
            writer.Write(Test);

            if (IfFalse != null)
            {
                writer.Write(" THEN ");
                writer.Write(IfFalse);
            }

            writer.Write(" END");
        }
예제 #16
0
        /// <summary>
        /// Serializes to the specified writer.
        /// </summary>
        /// <param name="writer">The writer.</param>
        public void Serialize(ISqlWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            writer.WriteBeginInsert();
            writer.WriteTelemetryType("metric");
            writer.WriteTelemetryName(this.Name);
            writer.WriteTimestamp(this.Timestamp);
            writer.WriteContext(this.Context);
            writer.WriteProperties(this.Context.Properties);
            writer.WriteValue(this.Value);
            writer.WriteEndInsert();
        }
예제 #17
0
        private void EndBitwiseOp(string op)
        {
            ISQLFunction function = sessionFactory.SQLFunctionRegistry.FindSQLFunction(op);

            if (function == null)
            {
                return;
            }

            var functionArguments = (BitwiseOpWriter)writer;

            writer = outputStack[0];
            outputStack.RemoveAt(0);

            Out(function.Render(functionArguments.Args, sessionFactory));
        }
예제 #18
0
        /// <summary>
        /// Serializes to the specified writer.
        /// </summary>
        /// <param name="writer">The writer.</param>
        public void Serialize(ISqlWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            writer.WriteBeginInsert();
            writer.WriteTelemetryType("exception");
            writer.WriteTelemetryName(this.Exception.Source);
            writer.WriteMessage(this.Exception.Message);
            writer.WriteTimestamp(this.Timestamp);
            writer.WriteContext(this.Context);
            writer.WriteProperties(this.Context.Properties);
            writer.WriteMetrics(this.Metrics);
            writer.WriteEndInsert();
        }
예제 #19
0
        private void BeginFunctionTemplate(IASTNode m, IASTNode i)
        {
            var          methodNode = (MethodNode)m;
            ISQLFunction template   = methodNode.SQLFunction;

            if (template == null)
            {
                // if template is null we just write the function out as it appears in the hql statement
                Out(i);
                Out("(");
            }
            else
            {
                // this function has a template -> redirect output and catch the arguments
                outputStack.Insert(0, writer);
                writer = new FunctionArguments();
            }
        }
예제 #20
0
        private void EndFunctionTemplate(IASTNode m)
        {
            var          methodNode = (MethodNode)m;
            ISQLFunction template   = methodNode.SQLFunction;

            if (template == null)
            {
                Out(")");
            }
            else
            {
                // this function has a template -> restore output, apply the template and write the result out
                var functionArguments = (FunctionArguments)writer;                 // TODO: Downcast to avoid using an interface?  Yuck.
                writer = outputStack[0];
                outputStack.RemoveAt(0);
                Out(template.Render(functionArguments.Args, sessionFactory));
            }
        }
예제 #21
0
        protected override void WriteTo(ISqlWriter writer)
        {
            writer.Write(SelectExpression);

            if (OrderBy.Count > 0)
            {
                writer.Write("ORDER BY ");

                var orderByCount = OrderBy.Count;
                var i            = -1;
                foreach (var column in OrderBy)
                {
                    writer.Write(column);

                    if (++i < orderByCount - 1)
                    {
                        writer.Write(", ");
                    }
                }
            }
        }
예제 #22
0
 protected virtual void WriteTo(ISqlWriter writer)
 {
 }
예제 #23
0
        void ISqlElement.ToString(ISqlWriter writer)
        {
            writer.Write(Expression);

            if (Alias != null) {
                writer.Write(" AS ");
                writer.Write(Alias);
            }
        }
예제 #24
0
 void ISqlElement.ToString(ISqlWriter writer)
 {
     writer.Write(":");
     writer.Write(VariableName);
 }
예제 #25
0
        private void EndQuery()
        {
            QueryWriter queryWriter = ((QueryWriter) writer);
            SqlString sqlString = queryWriter.ToSqlString();

            if (queryWriter.Take.HasValue || queryWriter.Skip.HasValue)
                sqlString = sessionFactory.Dialect.GetLimitString(sqlString, queryWriter.Skip ?? 0, queryWriter.Take ?? int.MaxValue);

            writer = outputStack[0];
            outputStack.RemoveAt(0);
            Out(sqlString);
        }
예제 #26
0
 private void StartQuery()
 {
     outputStack.Insert(0, writer);
     writer = new QueryWriter();
 }
예제 #27
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write("(");
     writer.Write(Operand);
     writer.Write(")");
 }
예제 #28
0
 private void StartQuery()
 {
     outputStack.Insert(0, writer);
     writer = new QueryWriter();
 }
예제 #29
0
 public QueryHelperMsSql(AppMetadata schema, string connectionString)
     : base(schema, ProviderName, connectionString)
 {
     TypeConverter = new SqlTypeConverterMsSql();
     SqlWriter     = new SqlWriterMsSql();
 }
예제 #30
0
 protected virtual void WriteTo(ISqlWriter writer)
 {
     writer.Write(Name);
 }
        /// <summary>The get summary.</summary>
        /// <param name="column">The column.</param>
        /// <returns>The get summary.</returns>
        private string GetSummary(DbModelColumn column)
        {
            StringWriter stringWriter = new StringWriter();
            if (_sqlWriter == null)
            {
                _sqlWriter = _services.Resolve<ISqlWriter>();
            }

            _sqlWriter.WriteSummary(stringWriter, column);
            return stringWriter.ToString();
        }
예제 #32
0
 /// <summary>The settings_ database connection reset.</summary>
 /// <param name="sender">The sender.</param>
 /// <param name="e">The e.</param>
 private void Settings_DatabaseConnectionReset(object sender, EventArgs e)
 {
     _metaDataService = null;
     _sqlWriter       = null;
     ExecLoadDatabaseDetails();
 }
예제 #33
0
 public Converter(DiffInfo diff, ISqlWriter writer)
 {
     this.Diff   = diff;
     this.Writer = writer;
 }
예제 #34
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write("(");
     writer.Write(Operand);
     writer.Write(")");
 }
예제 #35
0
        void ISqlElement.ToString(ISqlWriter writer)
        {
            writer.Write("SELECT ");
            if (Into != null) {
                writer.Write("INTO ");
                // TODO:

                writer.WriteLine();
            } else {
                var colCount = Columns.Count;
                int i = -1;
                foreach (var column in Columns) {
                    writer.Write(column);

                    if (++i < colCount - 1)
                        writer.Write(", ");
                }

                if (colCount > 0)
                    writer.WriteLine();
            }

            if (From != null) {
                writer.Indent(4);
                writer.Write(From);
                writer.WriteLine();
                writer.Deindent(4);
            }

            if (Where != null) {
                writer.Indent(4);
                writer.Write("WHERE ");
                writer.Write(Where);
                writer.WriteLine();
                writer.Deindent(4);
            }

            if (Having != null) {
                writer.Indent(4);
                writer.Write("HAVING ");
                writer.Write(Having);
                writer.WriteLine();
                writer.Deindent(4);
            }
        }
 public LocationListDataProvider(ISqlReader reader, ISqlWriter writer)
 {
     Reader = reader;
     Writer = writer;
 }
예제 #37
0
 private void EndFunctionTemplate(IASTNode m)
 {
     var methodNode = (MethodNode) m;
     ISQLFunction template = methodNode.SQLFunction;
     if (template == null)
     {
         Out(")");
     }
     else
     {
         // this function has a template -> restore output, apply the template and write the result out
         var functionArguments = (FunctionArguments) writer; // TODO: Downcast to avoid using an interface?  Yuck.
         writer = outputStack[0];
         outputStack.RemoveAt(0);
         Out(template.Render(functionArguments.Args, sessionFactory));
     }
 }
예제 #38
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write(Left);
     writer.Write(" {0} ", Operator.AsString());
     writer.Write(Right);
 }
예제 #39
0
        public static void Main(string[] args)
        {
            #region Debug

            //Console.ReadLine();
            //AddArgToDebug(ref args, "-n", "teste1");
            //AddArgToDebug(ref args, "-n", "teste2");
            //AddArgToDebug(ref args, "-n", "teste3");
            //AddArgToDebug(ref args, "-n", "");
            //AddArgToDebug(ref args, "-n", null);
            //AddArgToDebug(ref args, "-r", "2");
            //AddArgToDebug(ref args, "-r", "3");

            #endregion

            #region get parameters

            var showHelp           = false;
            var path               = "";
            var sqlWriterName      = "sqlserver";
            var tableName          = "Table1";
            var maxBulk            = 25;
            var insertStringFormat = SqlInsertStringFormat.None;
            var hasHeader          = true;
            var delimiter          = ";";
            var count              = -1;

            var paramsParse = new OptionSet()
            {
                { "p|path=", "Set the file path to convert to SQL.", paramValue => path = paramValue },
                { "delimiter=", "Set the delimiter columns, default is ';'.", paramValue => delimiter = paramValue },
                { "count=", "Set the count line to generate", (int paramValue) => count = paramValue },
                { "dbname=", "Set the database name to determine the type of output SQL, the options are: \r\n [sqlserver], \r\n [mysql].", paramValue => sqlWriterName = paramValue },
                { "tname=", "Set the table name to generate, default is '#Table1'.", paramValue => tableName = paramValue },
                { "maxbulk=", "Set the amount of 'values' that will be grouped in 'inserts' section, default is '" + maxBulk + "'.", (int paramValue) => maxBulk = paramValue },
                { "insert-format=", "Set the output format to 'insert values', default is 'None' and the options are: \r\n [none], \r\n [break-line], \r\n [break-line-and-show-columns]"
                  , paramValue =>
                  {
                      if (paramValue == "break-line")
                      {
                          insertStringFormat = SqlInsertStringFormat.BreakLineForEachColumn;
                      }
                      else if (paramValue == "break-line-and-show-columns")
                      {
                          insertStringFormat = SqlInsertStringFormat.BreakLineAndShowColumnNameForEachColumn;
                      }
                      else
                      {
                          insertStringFormat = SqlInsertStringFormat.None;
                      }
                  } },
                { "not-header", "Set if the CSV hasen't header", paramValue => hasHeader = false },
                { "v", "Increase debug", paramValue => { if (paramValue != null)
                                                         {
                                                             ++verbosity;
                                                         }
                  } },
                { "h|?|help", "Show the help.", paramValue => showHelp = paramValue != null },
            };

            #endregion

            List <string> extra;

            try
            {
                extra = paramsParse.Parse(args);
            }
            catch (OptionException e)
            {
                Console.Write("error: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `csvtosql --help' for more information.");
                return;
            }

            if (extra.Count > 0)
            {
                Console.WriteLine();
                Console.WriteLine("**There are no recognized parameters:");
                Console.WriteLine();

                foreach (var e in extra)
                {
                    Console.WriteLine(e);
                }

                Console.WriteLine();
                Console.WriteLine("** All args:");
                Console.WriteLine();

                foreach (var e in args)
                {
                    Console.WriteLine(e);
                }
                return;
            }

            if (showHelp)
            {
                ShowHelp(paramsParse);
                return;
            }

            ISqlWriter sqlWriter = null;
            if (sqlWriterName == "sqlserver")
            {
                sqlWriter = new SqlServerWriter();
            }
            else if (sqlWriterName == "mysql")
            {
                sqlWriter = new MySQLWriter();
            }
            else
            {
                Console.Write("The parameter 'dbname' was not found");
                return;
            }

            try
            {
                TextReader textReader = null;

                if (Console.IsInputRedirected)
                {
                    textReader = Console.In;
                }
                else
                {
                    textReader = GetTextReader(path);
                }

                var sqlTable = SqlTable.CsvToSqlTable(textReader, sqlWriter, hasHeader, delimiter, count);
                var output   = new StringBuilder();
                if (sqlTable != null)
                {
                    output = sqlWriter.GenerateTableWithInserts(sqlTable, tableName, maxBulk, insertStringFormat);
                }
                else
                {
                    output.Append("The 'CSV' is empty");
                }
                Console.OutputEncoding = Encoding.UTF8;
                int iChunkSize = 50000000;
                for (int i = 0; i < output.Length; i += iChunkSize)
                {
                    int    A_Size = output.Length - i >= iChunkSize ? iChunkSize : Math.Abs(output.Length - i);
                    char[] out_i  = new char[A_Size];
                    output.CopyTo(i, out_i, 0, A_Size);
                    Console.Write(out_i);
                }
            }
            catch (Exception ex)
            {
                Console.Write("error: ");
                Console.WriteLine(ex.Message);
                Console.WriteLine("Try `csvtosql --help' for more information.");
                return;
            }
        }
예제 #40
0
 void ISqlElement.ToString(ISqlWriter writer)
 {
     WriteTo(writer);
 }
예제 #41
0
		private void BeginBitwiseOp(string op)
		{
			var function = sessionFactory.SQLFunctionRegistry.FindSQLFunction(op.ToLowerInvariant());
			if (function == null)
				return;

			outputStack.Insert(0, writer);
			writer = new BitwiseOpWriter();
		}
예제 #42
0
 private void BeginFunctionTemplate(IASTNode m, IASTNode i)
 {
     var methodNode = (MethodNode) m;
     ISQLFunction template = methodNode.SQLFunction;
     if (template == null)
     {
         // if template is null we just write the function out as it appears in the hql statement
         Out(i);
         Out("(");
     }
     else
     {
         // this function has a template -> redirect output and catch the arguments
         outputStack.Insert(0, writer);
         writer = new FunctionArguments();
     }
 }
예제 #43
0
		private void EndBitwiseOp(string op)
		{
			ISQLFunction function = sessionFactory.SQLFunctionRegistry.FindSQLFunction(op.ToLowerInvariant());
			if (function == null)
				return;

			var functionArguments = (BitwiseOpWriter)writer;
			writer = outputStack[0];
			outputStack.RemoveAt(0);

			Out(function.Render(functionArguments.Args, sessionFactory));
		}
예제 #44
0
        private void EndQuery()
        {
            SqlString sqlString = GetSqlStringWithLimitsIfNeeded((QueryWriter) writer);

            writer = outputStack[0];
            outputStack.RemoveAt(0);
            Out(sqlString);
        }
예제 #45
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write(Left);
     writer.Write(" {0} ", Operator.AsString());
     writer.Write(Right);
 }
예제 #46
0
 void ISqlElement.ToString(ISqlWriter writer)
 {
     WriteTo(writer);
 }
예제 #47
0
 protected virtual void WriteTo(ISqlWriter writer)
 {
     var dump = new ExpressionStringWriter(writer);
     dump.Dump(this);
 }
예제 #48
0
        protected override void WriteTo(ISqlWriter writer)
        {
            writer.Write(SelectExpression);

            if (OrderBy.Count > 0) {
                writer.Write("ORDER BY ");

                var orderByCount = OrderBy.Count;
                var i = -1;
                foreach (var column in OrderBy) {
                    writer.Write(column);

                    if (++i < orderByCount - 1)
                        writer.Write(", ");
                }
            }
        }
예제 #49
0
 void ISqlElement.ToString(ISqlWriter writer)
 {
     writer.Write(":");
     writer.Write(VariableName);
 }
예제 #50
0
 protected virtual void WriteTo(ISqlWriter writer)
 {
 }
예제 #51
0
 void ISqlElement.ToString(ISqlWriter writer)
 {
     writer.Write(Expression);
 }
예제 #52
0
        public static SqlTable CsvToSqlTable(TextReader textReader, ISqlWriter sqlWriter, bool hasHeader = true, string delimiter = ",", int count = -1)
        {
            var config = new CsvHelper.Configuration.CsvConfiguration();
            config.Delimiter = delimiter;
            config.HasHeaderRecord = hasHeader;

            var reader = new CsvHelper.CsvReader(textReader, config);
            var rows = reader.GetRecords<object>().ToList();

            textReader.Close();
            SqlTable sqlTable = null;
            if (rows.Count > 0)
            {
                sqlTable = new SqlTable();
                sqlTable.Headers = new List<SqlColumnTypeDefinition>();
                sqlTable.Rows = new List<SqlRow>();
                var i = 0;
                foreach (var row in rows)
                {
                    if (i == count)
                        break;

                    i++;

                    var columns = (System.Dynamic.ExpandoObject)row;
                    var sqlRow = new SqlRow();
                    sqlTable.Rows.Add(sqlRow);
                    var countUnkown = 1;
                    foreach (var col in columns)
                    {
                        // set rows
                        var sqlColumn = new SqlColumn();
                        sqlColumn.Type = sqlWriter.SqlTypeToCSharpType(col.Value);
                        sqlColumn.Value = col.Value;
                        sqlRow.Columns.Add(sqlColumn);

                        // set headers
                        var key = col.Key;
                        if (string.IsNullOrWhiteSpace(key))
                        {
                            key = "Unkown" + countUnkown;
                            countUnkown++;
                        }

                        SqlColumnTypeDefinition sqlColumnTypeDefinition = sqlTable.Headers.FirstOrDefault(f => f.Name == key);
                        if (sqlColumnTypeDefinition == null)
                        {
                            sqlColumnTypeDefinition = new SqlColumnTypeDefinition();
                            sqlColumnTypeDefinition.Name = col.Key;
                            sqlColumnTypeDefinition.Type = sqlColumn.Type;
                            sqlTable.Headers.Add(sqlColumnTypeDefinition);
                        }

                        sqlColumn.ColumnTypeDefinition = sqlColumnTypeDefinition;

                        // override type of header to STRING because exists a string in the column
                        if (sqlColumnTypeDefinition.Type != typeof(string) && sqlColumn.Type == typeof(string))
                            sqlColumnTypeDefinition.Type = typeof(string);
                    }
                }

                // Fix type to STRING if all values is 'NULL'
                foreach (var sqlHeader in sqlTable.Headers)
                {
                    if (sqlHeader.Type == null)
                        sqlHeader.Type = typeof(string);

                    sqlHeader.TypeFormatted = sqlWriter.CSharpTypeToSqlType(sqlHeader.Type);
                }
            }

            return sqlTable;
        }
예제 #53
0
 public ExpressionStringWriter(ISqlWriter writer)
 {
     this.writer = writer;
 }
 /// <summary>The settings_ database connection reset.</summary>
 /// <param name="sender">The sender.</param>
 /// <param name="e">The e.</param>
 private void Settings_DatabaseConnectionReset(object sender, EventArgs e)
 {
     _metaDataService = null;
     _sqlWriter = null;
     ExecLoadDatabaseDetails();
 }
예제 #55
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write(VariableName);
 }
예제 #56
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write(VariableName);
 }
예제 #57
0
 protected override void WriteTo(ISqlWriter writer)
 {
     writer.Write(Value);
 }