Example #1
0
        public void ToString_WithJoinTable_NoJTSelectColumns()
        {
            var schema    = "fromSchema";
            var name      = "fromTable";
            var tableName = new EntityName(schema, name);

            var fromColumn1 = "fromCol1";
            var fromColumn2 = "fromCol2";
            var fromAlias2  = "fromAlias2";
            var columns     = new IColumnName[]  {
                new ColumnName(fromColumn1),
                new ColumnName(fromColumn2, fromAlias2)
            };
            IFromTable fromTable = new FromTable(tableName, columns);

            IEntityName joinTableName = new EntityName("joinTable");
            var         joinTable     = new JoinTable(joinTableName);

            fromTable.Join(joinTable);

            var selectClause = fromTable.ToString();
            var testString   = $"select [{schema}].[{name}].[{fromColumn1}], [{schema}].[{name}].[{fromColumn2}] as [{fromAlias2}]\r\nfrom [{schema}].[{name}]\r\n";

            Assert.AreEqual(testString.TrimEnd(), selectClause.TrimEnd());
        }
Example #2
0
        protected override Statement Prepare(IQueryContext context)
        {
            var selectStatement = new SelectStatement {
                SelectExpression = SelectExpression,
                OrderBy          = OrderBy
            };

            // check to see if the construct is the special one for
            // selecting the latest IDENTITY value from a table
            if (IsIdentitySelect(selectStatement.SelectExpression))
            {
                selectStatement.SelectExpression.Columns.RemoveAt(0);
                FromTable fromTable = ((IList <FromTable>)selectStatement.SelectExpression.From.AllTables)[0];
                var       idExp     = Expression.FunctionCall("identity", Expression.Constant(DataObject.String(fromTable.Name.ToString())));
                selectStatement.SelectExpression.Columns.Add(new SelectColumn(idExp));
            }

            if (selectStatement.SelectExpression.Into != null)
            {
                selectStatement.intoClause = selectStatement.SelectExpression.Into;
            }

            // Generate the TableExpressionFromSet hierarchy for the expression,
            TableExpressionFromSet fromSet = Planner.GenerateFromSet(selectStatement.SelectExpression, context.Connection);

            // Form the plan
            selectStatement.Plan = Planner.FormQueryPlan(context.Connection, selectStatement.SelectExpression, fromSet, selectStatement.OrderBy);
            return(selectStatement);
        }
Example #3
0
        public void ToString_WithJoinTable()
        {
            var schema    = "fromSchema";
            var name      = "fromTable";
            var tableName = new EntityName(schema, name);

            var fromColumn1 = "fromCol1";
            var fromColumn2 = "fromCol2";
            var fromAlias2  = "fromAlias2";
            var columns     = new IItemName[]  {
                new ItemName(fromColumn1),
                new ColumnName(fromColumn2, fromAlias2)
            };
            var fromTable = new FromTable(tableName, columns);

            IEntityName joinTableName = new EntityName("joinTable");

            IItemName[] selectColumns = new IItemName[2] {
                new ItemName("joinTblCol1"), new ItemName("joinTblCol2")
            };
            var joinTable = new JoinTable(joinTableName, selectColumns);

            fromTable.Join(joinTable);

            var selectClause = fromTable.GetSelectClause();
            var testString   = $"[{schema}].[{name}].[{fromColumn1}], [{schema}].[{name}].[{fromColumn2}] as [{fromAlias2}], {joinTableName}.{selectColumns[0]}, {joinTableName}.{selectColumns[1]}";

            Assert.AreEqual(testString, selectClause);
        }
Example #4
0
 public void Constructor_NullTableNameArgument()
 {
     IItemName[] selectColumns = new IItemName[1] {
         new ColumnName("name", "alias")
     };
     var table = new FromTable(null, selectColumns);
 }
Example #5
0
        public void Constructor_EmptyColumnsArgument()
        {
            IEntityName tableName = new EntityName("tableName");

            IItemName[] selectColumns = new IItemName[0];

            var table = new FromTable(tableName, selectColumns);
        }
Example #6
0
        public void Constructor_OneNullColumnArgument()
        {
            IEntityName tableName = new EntityName("tableName");

            IItemName[] selectColumns = new IItemName[2] {
                new ColumnName("name", "alias"), null
            };

            var table = new FromTable(tableName, selectColumns);
        }
Example #7
0
        private void LoadTableRows()
        {
            FromTable.SetNumberOfRows((nint)_from.Count, "default");

            for (var i = 0; i < _from.Count; i++)
            {
                var elementRow = (FromRowController)FromTable.GetRowController(i);

                elementRow.FromLabel.SetText(_from[i].Name);
            }
        }
Example #8
0
        public void ToString_WithSchemaAndOneColumn()
        {
            var schema    = "fromSchema";
            var name      = "fromTable";
            var tableName = new EntityName(schema, name);

            var fromColumn1 = "fromCol1";
            var columns     = new IItemName[] { new ItemName(fromColumn1) };
            var ft          = new FromTable(tableName, columns);

            Assert.AreEqual($"select [{schema}].[{name}].[{fromColumn1}]\r\nfrom [{schema}].[{name}]\r\n", ft.ToString());
        }
Example #9
0
        public void Constructor()
        {
            IEntityName tableName = new EntityName("tableName");

            IItemName[] selectColumns = new IItemName[1] {
                new ColumnName("name", "alias")
            };
            var table = new FromTable(tableName, selectColumns);

            Assert.AreEqual(tableName, table.TableName);
            Assert.AreEqual(selectColumns, table.Columns);
            Assert.IsNull(table.JoinTables);
        }
Example #10
0
        public void ToString_WithoutSchema()
        {
            var name      = "fromTable";
            var tableName = new EntityName(name);

            var fromColumn1 = "fromCol1";
            var fromColumn2 = "fromCol2";
            var fromAlias2  = "fromAlias2";
            var columns     = new IItemName[]  {
                new ItemName(fromColumn1),
                new ColumnName(fromColumn2, fromAlias2)
            };
            var ft = new FromTable(tableName, columns);

            Assert.AreEqual($"select [{name}].[{fromColumn1}], [{name}].[{fromColumn2}] as [{fromAlias2}]\r\nfrom [{name}]\r\n", ft.ToString());
        }
 public override string ToString()
 {
     return(FromTable.ToString() + " -> " + ToTable.ToString());
 }
Example #12
0
        /// <summary>
        /// Adds a table as source to the query with a given alias.
        /// </summary>
        /// <param name="alias">The unique name alias of the table source within the clause.</param>
        /// <param name="table">The table source object to query from.</param>
        public void AddTable(string alias, FromTable table)
        {
            if (table == null)
                throw new ArgumentNullException("table");

            if (!String.IsNullOrEmpty(alias)) {
                if (tableNames.Contains(alias))
                    throw new ArgumentException(String.Format("Duplicated table name {0} is FROM clause.", alias));

                tableNames.Add(alias);
            }

            // Create a new unique key for this table
            string key = CreateNewKey();
            table.UniqueKey = key;
            fromTables.Add(table);
        }
Example #13
0
        public static void Serialize(FromTable table, BinaryWriter writer)
        {
            if (table.IsSubQuery) {
                writer.Write((byte) 2);
                SqlExpression.Serialize(table.SubQuery, writer);
            } else {
                writer.Write((byte)1);
                writer.Write(table.Name);
            }

            bool hasAlias = !String.IsNullOrEmpty(table.Alias);
            if (hasAlias) {
                writer.Write((byte) 1);
                writer.Write(table.Alias);
            } else {
                writer.Write((byte)0);
            }

            bool hasUniqueKey = !String.IsNullOrEmpty(table.UniqueKey);
            if (hasUniqueKey) {
                writer.Write((byte) 1);
                writer.Write(table.UniqueKey);
            } else {
                writer.Write((byte)0);
            }
        }
Example #14
0
        public static FromTable Deserialize(BinaryReader reader)
        {
            string name = null;
            SqlQueryExpression query = null;

            var type = reader.ReadByte();
            if (type == 1) {
                name = reader.ReadString();
            } else if (type == 2) {
                query = (SqlQueryExpression) SqlExpression.Deserialize(reader);
            } else {
                throw new FormatException();
            }

            string alias = null;
            var hasAlias = reader.ReadByte() == 1;
            if (hasAlias)
                alias = reader.ReadString();

            FromTable table;
            if (type == 1) {
                table = new FromTable(name, alias);
            } else {
                table = new FromTable(query, alias);
            }

            var hasUniqueKey = reader.ReadByte() == 1;
            if (hasUniqueKey)
                table.UniqueKey = reader.ReadString();

            return table;
        }
Example #15
0
        private void AddFromTable(ObjectName tableName, FromTable table)
        {
            if (tableName != null) {
                if (allTableNames.Contains(tableName))
                    throw new ApplicationException("Duplicate table name in FROM clause: " + tableName);

                allTableNames.Add(tableName);
            }

            // Create a new unique key for this table
            string key = CreateNewKey();
            table.UniqueKey = key;
            // Add the table key to the join set
            JoinSet.AddTable(key);
            // Add to the alias def map
            fromTableList.Add(table);
        }
Example #16
0
 public void Constructor_NullColumnsArgument()
 {
     IEntityName tableName = new EntityName("tableName");
     var         table     = new FromTable(tableName, null);
 }
Example #17
0
        public FromTable Prepare(IExpressionPreparer preparer)
        {
            var fromTable = new FromTable {
                Name = Name,
                Alias =
                Alias,
                UniqueKey = UniqueKey,
                IsSubQueryTable = IsSubQueryTable
            };
            if (SubSelect != null)
                fromTable.SubSelect = SubSelect.Prepare(preparer);

            return fromTable;
        }