public void BlogPlainFields()
        {
            Kernel.AddComponent("plainfields", typeof(IPlainFieldInferenceService), typeof(PlainFieldInferenceService));
            Kernel.AddComponent("nameService", typeof(INamingService), typeof(NamingService));
            Kernel.AddComponent("typeinf", typeof(ITypeInferenceService), typeof(TypeInferenceService));

            IPlainFieldInferenceService plainService = Kernel[typeof(IPlainFieldInferenceService)] as IPlainFieldInferenceService;

            TableDefinition table = new TableDefinition("blogs", new DatabaseDefinition("alias"));

            table.AddColumn(new ColumnDefinition("id", true, false, true, false, OleDbType.Integer));
            table.AddColumn(new ColumnDefinition("name", false, false, false, false, OleDbType.VarChar));
            table.AddColumn(new ColumnDefinition("authorid", false, true, false, false, OleDbType.VarChar));

            ActiveRecordPropertyDescriptor[] descs = plainService.InferProperties(table);

            Assert.IsNotNull(descs);
            Assert.AreEqual(2, descs.Length);

            ActiveRecordPropertyDescriptor desc1 = descs[0];
            ActiveRecordPropertyDescriptor desc2 = descs[1];

            Assert.AreEqual("id", desc1.ColumnName);
            Assert.AreEqual("Integer", desc1.ColumnTypeName);
            Assert.AreEqual("Id", desc1.PropertyName);
            Assert.AreEqual(typeof(int), desc1.PropertyType);

            Assert.AreEqual("name", desc2.ColumnName);
            Assert.AreEqual("VarChar", desc2.ColumnTypeName);
            Assert.AreEqual("Name", desc2.PropertyName);
            Assert.AreEqual(typeof(String), desc2.PropertyType);
        }
예제 #2
0
파일: Program.cs 프로젝트: windischb/PgSql
        public static void CreateDatabase()
        {
            var tbd = new TableDefinition();

            tbd.AddColumn("RequestId", "guid").AsPrimaryKey().DefaultValue(DefaultValues.Guid.New);
            tbd.AddColumn("Reference", "string").CanBeNull();
            tbd.AddColumn("JobName", "string").CanNotBeNull();
            tbd.AddColumn("Data", "object").CanBeNull();
            tbd.AddColumn("Response", "object").CanBeNull();
            tbd.AddColumn("Status", "string").CanNotBeNull();
            tbd.AddColumn("CreatedAt", "datetime").CanNotBeNull();
            tbd.AddColumn("UpdatedAt", "datetime").CanBeNull();

            var conn = ConnectionString.Build()
                       .WithCredential("postgres", "postgres")
                       .WithDatabase("TestScripting")
                       .WithSchema("Test");

            var tbl = new Schema(conn).CreateIfNotExists().CreateTable("Table", tbd, false);

            var dict = new Dictionary <string, object>();

            dict.Add("RequestId", null);
            dict.Add("Reference", null);
            dict.Add("JobName", "test");
            dict.Add("Data", null);
            dict.Add("Response", null);
            dict.Add("Status", "New");
            dict.Add("CreatedAt", DateTime.Now);
            dict.Add("UpdatedAt", null);

            var id = tbl.Insert(dict);
        }
        public void GetPrimaryKeyColumns()
        {
            TableDefinition table = new TableDefinition();
            
            table.AddColumn(new ColumnDefinition("Foo"));
            table.AddColumn(new ColumnDefinition("ID"));
            table.AddColumn(new ColumnDefinition("Bar"));
            
            Assert.IsNull(table.GetPrimaryKeyColumns());

            table.Columns[1].PrimaryKey = true;

            Assert.AreSame(table.Columns[1], table.GetPrimaryKeyColumns()[0]);
        }
        public void GetColumn()
        {
            TableDefinition table = new TableDefinition("Qux");
            table.AddColumn(new ColumnDefinition("Foo"));
            table.AddColumn(new ColumnDefinition("bAr"));

            Assert.AreSame(table.Columns[0], table.GetColumn("Foo"));
            Assert.AreSame(table.Columns[0], table.GetColumn("foo"));

            Assert.AreSame(table.Columns[1], table.GetColumn("Bar"));
            Assert.AreSame(table.Columns[1], table.GetColumn("BAR"));

            Assert.IsNull(table.GetColumn("ID"));
        }
예제 #5
0
        public void CreateOrUpdateStore_LateAddEntity_ShouldUpdateDb()
        {
            DataStore.AddType<LateAddItem>();

            DataStore.CreateOrUpdateStore();

            var expected = new TableDefinition("LateAddItem");
            expected.AddColumn("Id", 0, false, "INTEGER");
            expected.AddColumn("Name", 1, true, "TEXT");

            var schemaChecker = new SqliteSchemaChecker(DataStore);
            var current = schemaChecker.GetTableFormat("LateAddItem");

            Assert.AreEqual(expected, current);
        }
        private void BuildBlogPostsStructure(out TableDefinition blogTable, out TableDefinition postTable)
        {
            DatabaseDefinition dbdef = new DatabaseDefinition("alias");

            blogTable = new TableDefinition("blogs", dbdef);
            blogTable.AddColumn(new ColumnDefinition("id", true, false, true, false, OleDbType.Integer));
            blogTable.AddColumn(new ColumnDefinition("name", false, false, false, false, OleDbType.VarChar));

            postTable = new TableDefinition("posts", dbdef);
            postTable.AddColumn(new ColumnDefinition("id", true, false, true, false, OleDbType.Integer));
            postTable.AddColumn(new ColumnDefinition("name", false, false, false, false, OleDbType.VarChar));
            postTable.AddColumn(new ColumnDefinition("blog_id", false, true, false, false, OleDbType.VarChar, blogTable));

            blogTable.AddManyRelation(postTable);
        }
        public void RemoveColumn()
        {
            TableDefinition table = new TableDefinition("Qux");
            
            table.AddColumn(new ColumnDefinition("Foo"));
            table.AddColumn(new ColumnDefinition("bAr"));

            table.RemoveColumn("foo");
            Assert.AreEqual(1, table.Columns.Count);

            table.RemoveColumn("baz");
            Assert.AreEqual(1, table.Columns.Count);

            table.RemoveColumn("BAR");
            Assert.AreEqual(0, table.Columns.Count);
        }
예제 #8
0
        public void SelfReference()
        {
            InitKernel();
            IRelationshipInferenceService relService = ObtainService();

            DatabaseDefinition dbdef = new DatabaseDefinition("alias");

            TableDefinition categoryTable = new TableDefinition("categories", dbdef);

            categoryTable.AddColumn(new ColumnDefinition("id", true, false, true, false, OleDbType.Integer));
            categoryTable.AddColumn(new ColumnDefinition("name", false, false, false, false, OleDbType.VarChar));
            categoryTable.AddColumn(new ColumnDefinition("parent_id", false, true, false, false, OleDbType.Integer, categoryTable));

            categoryTable.AddManyRelation(categoryTable);

            BuildContext context = new BuildContext();

            ActiveRecordDescriptor arDesc = new ActiveRecordDescriptor();

            ActiveRecordPropertyDescriptor[] descs = relService.InferRelations(arDesc, categoryTable, context);

            Assert.IsFalse(context.HasPendents);

            Assert.IsNotNull(descs);
            Assert.AreEqual(2, descs.Length);

            ActiveRecordHasManyDescriptor desc1 = descs[0] as ActiveRecordHasManyDescriptor;

            Assert.IsNotNull(desc1);
            Assert.IsNotNull(desc1.TargetType);
            Assert.IsNotNull(desc1.PropertyType);

            Assert.AreEqual("Categories", desc1.PropertyName);
            Assert.AreEqual("parent_id", desc1.ColumnName);
            Assert.AreEqual(typeof(IList), desc1.PropertyType);

            ActiveRecordBelongsToDescriptor desc2 = descs[1] as ActiveRecordBelongsToDescriptor;

            Assert.IsNotNull(desc2);
            Assert.IsNotNull(desc2.TargetType);
            Assert.IsNull(desc2.PropertyType);
            Assert.AreEqual("Category", desc2.PropertyName);
            Assert.AreEqual("parent_id", desc2.ColumnName);
        }
        public void AddColumn()
        {
            ITableDefinition table = new TableDefinition("Foo");
            IColumnDefinition column = new ColumnDefinition("ID");

            table.AddColumn(column);

            Assert.AreSame(column, table.Columns[0]);
            Assert.AreEqual(table.Name, column.Table);
        }
        public void TestFixtureSetUp()
        {
            schema = new Schema();

            TableDefinition barTable = new TableDefinition("Bar");
            barTable.AddColumn(new ColumnDefinition("ID", "Bar", DbType.Int32, false, null, null, null, true, false));
            barTable.AddColumn(new ColumnDefinition("Name", DbType.String, false, 1000, null, null));
            barTable.AddColumn(new ColumnDefinition("ParentID", DbType.Int32, true, null, null, null));

            uqNameIndex = new IndexDefinition("UQ_Name", new IndexColumnDefinition("Name", SortDirection.Ascending));
            uqNameIndex.Unique = true;
            uqNameIndex.Clustered = true;
            barTable.AddIndex(uqNameIndex);

            ReferenceDefinition fkBarReference = new ReferenceDefinition("FK_Bar", "Bar", "Bar");
            fkBarReference.PkColumns.Add("ID");
            fkBarReference.FkColumns.Add("ParentID");

            schema.AddTable(barTable);
        }
        public void HasÁndBelongsToMany()
        {
            InitKernel();
            IRelationshipBuilder relService = ObtainService();

            DatabaseDefinition dbdef = new DatabaseDefinition("alias");

            TableDefinition compTable = new TableDefinition("companies", dbdef);

            compTable.AddColumn(new ColumnDefinition("id", true, false, true, false, OleDbType.Integer));
            compTable.AddColumn(new ColumnDefinition("name", false, false, false, false, OleDbType.VarChar));

            TableDefinition peopleTable = new TableDefinition("people", dbdef);

            peopleTable.AddColumn(new ColumnDefinition("id", true, false, true, false, OleDbType.Integer));
            peopleTable.AddColumn(new ColumnDefinition("name", false, false, false, false, OleDbType.VarChar));

            TableDefinition assocTable = new TableDefinition("companiespeople", dbdef);

            assocTable.AddColumn(new ColumnDefinition("comp_id", true, true, true, false, OleDbType.Integer));
            assocTable.AddColumn(new ColumnDefinition("person_id", true, true, false, false, OleDbType.Integer));

            ActiveRecordDescriptor desc       = new ActiveRecordDescriptor("Company");
            ActiveRecordDescriptor targetDesc = new ActiveRecordDescriptor("Person");

            RelationshipInfo info = new RelationshipInfo(AssociationEnum.HasAndBelongsToMany, desc, targetDesc);

            info.AssociationTable = assocTable;
            info.ParentCol        = new ColumnDefinition("comp_id", false, true, false, true, OleDbType.Integer);
            info.ChildCol         = new ColumnDefinition("person_id", false, true, false, true, OleDbType.Integer);

            ActiveRecordPropertyRelationDescriptor propDesc = relService.Build(info);

            Assert.IsNotNull(propDesc as ActiveRecordHasAndBelongsToManyDescriptor);
            Assert.IsNotNull(propDesc);
            Assert.AreEqual("People", propDesc.PropertyName);
            Assert.AreEqual(targetDesc, propDesc.TargetType);
            Assert.AreEqual("person_id", propDesc.ColumnName);
            Assert.AreEqual("comp_id", (propDesc as ActiveRecordHasAndBelongsToManyDescriptor).ColumnKey);
        }
        public void Execute(IDbPlatform platform, IRefactorNode refactorNode, Environment environment)
        {
            string auditTableName = AstNodePropertyUtil.AsString(refactorNode.Properties["audit-table"].Value);
            string tableName = AstNodePropertyUtil.AsString(refactorNode.Properties["table"].Value);
            //
            // We only need columns here
            ITableDefinition tableDefinition = environment.Schema.GetTable(tableName);

            ITableDefinition auditTable = new TableDefinition(auditTableName);
            foreach(ColumnDefinition column in tableDefinition.Columns)
            {
                //
                // Keep name and type only.
                IColumnDefinition auditColumn = new ColumnDefinition(column.Name);
                
                //
                // Special handling for rowversion
                if(column.Type == DbType.Time)
                {
                    auditColumn.Length = 8;
                    auditColumn.Type = DbType.Binary;
                } // if
                else
                {
                    auditColumn.Length = column.Length;
                    auditColumn.Type = column.Type;
                } // else

                auditColumn.Nullable = true;

                auditTable.AddColumn(auditColumn);
            } // foreach

            environment.Schema.AddTable(auditTable);

            //
            // Now build an AST
            IAddTableNode addAuditTableNode = new AddTableNode(refactorNode.Parent, auditTableName);
            foreach(IColumnDefinition auditColumn in auditTable.Columns)
            {
                IAddColumnNode addAuditColumnNode = new AddColumnNode(addAuditTableNode, auditColumn.Name);
                addAuditColumnNode.Type = auditColumn.Type;
                addAuditColumnNode.Length = auditColumn.Length;
                addAuditColumnNode.Nullable = auditColumn.Nullable;

                addAuditTableNode.ChildNodes.Add(addAuditColumnNode);
            } // foreach

            addAuditTableNode.Parent.ChildNodes.Add(addAuditTableNode);
        }
예제 #13
0
        public TableDefinition BuildTable <T>() where T : class
        {
            var table = new TableDefinition(TypeInfoCache <T> .Name);

            for (var i = 0; i < TypeInfoCache <T> .ReadWriteProperties.Length; ++i)
            {
                var property    = TypeInfoCache <T> .ReadWriteProperties[i];
                var dbType      = property.PropertyType.ToDbType();
                var column      = table.AddColumn(property.Name, dbType);
                var pkAttribute = property.GetCustomAttribute <PrimaryKeyAttribute>();
                column.IsPrimaryKey = pkAttribute != null;
                if (column.IsPrimaryKey)
                {
                    column.PrimaryKey.Direction       = pkAttribute.Direction;
                    column.PrimaryKey.IsAutoIncrement = pkAttribute.AutoIncrement;
                }
                else
                {
                    column.IsNullable = property.GetCustomAttribute <RequiredAttribute>() == null;
                    column.IsUnique   = property.GetCustomAttribute <UniqueAttribute>() != null;
                    var defaultAttribute = property.GetCustomAttribute <DefaultValueAttribute>();
                    if (defaultAttribute != null)
                    {
                        column.Default = defaultAttribute.Value;
                    }
                    var commentAttribute = property.GetCustomAttribute <CommentAttribute>();
                    if (commentAttribute != null)
                    {
                        column.AddComment(commentAttribute.Comment);
                    }
                    if (dbType.IsSizableType())
                    {
                        var maxSizeAttribute = property.GetCustomAttribute <MaxSizeAttribute>();
                        if (maxSizeAttribute != null)
                        {
                            column.MaxLength = maxSizeAttribute.Size;
                        }
                    }
                }
                var fkAttribute = property.GetCustomAttribute <ForeignKeyAttribute>();
                column.HasForeignKey = fkAttribute != null;
                if (column.HasForeignKey)
                {
                    column.ForeignKey.Schema = fkAttribute.Schema;
                    column.ForeignKey.Table  = fkAttribute.ReferenceTable;
                    column.ForeignKey.Column = fkAttribute.ReferenceColumn;
                }
            }
            return(table);
        }
        public void GetCompositePrimaryKeyColumn()
        {
            TableDefinition table = new TableDefinition();

            table.AddColumn(new ColumnDefinition("Foo"));
            table.AddColumn(new ColumnDefinition("ID"));
            table.AddColumn(new ColumnDefinition("Bar"));

            Assert.IsNull(table.GetPrimaryKeyColumns());

            table.Columns[1].PrimaryKey = true;
            table.Columns[2].PrimaryKey = true;

            CollectionAssert.AreEqual(new[] { table.Columns[1], table.Columns[2] }, table.GetPrimaryKeyColumns());
        }
        /// <summary>
        /// Visits the given <paramref name="addTableNode"/>.
        /// </summary>
        /// <param name="addTableNode"></param>
        public override void Visit(IAddTableNode addTableNode)
        {
            TableDefinition table = new TableDefinition(addTableNode.Name);
            Environment.Schema.AddTable(table);

            foreach(IAddColumnNode addColumnNode in Filter<IAddColumnNode>(addTableNode.ChildNodes))
            {
                table.AddColumn(BindAddColumn(addColumnNode));
                addColumnNode.Table = table.Name;

                addColumnNode.Accept(this);
            } // foreach

            //
            // Now process all but IAddColumnNode
            foreach(IAstNode astNode in FilterNot<IAddColumnNode>(addTableNode.ChildNodes))
            {
                astNode.Accept(this);
            } // foreach
        }
예제 #16
0
파일: Insert.cs 프로젝트: windischb/PgSql
        public PgSqlCommand GetSqlCommand(TableDefinition tableDefinition)
        {
            var sqlCommand = new PgSqlCommand();

            TableDefinition keyDefinition = new TableDefinition();

            sqlCommand.AppendCommand($"INSERT INTO {String.Join(", ", _intoDestination.GetSqlCommand(tableDefinition).Command)}");

            if (_intoColumns != null)
            {
                var intoColumnsComm = _intoColumns.GetSqlCommand(tableDefinition);
                sqlCommand.AppendCommandLine($"{Environment.NewLine}\t({intoColumnsComm.Command})");

                _intoColumns._columns.ForEach(c =>
                {
                    var col = tableDefinition?.GetColumnBuilderByDbName(c._name);
                    if (col == null)
                    {
                        keyDefinition.AddColumn(new ColumnBuilder().SetDbName(c._name));
                    }
                    else
                    {
                        keyDefinition.AddColumn(col);
                    }
                });
            }

            if (_valueClauses.Any())
            {
                sqlCommand.AppendCommandLine($"VALUES");

                foreach (var valuesClause in _valueClauses)
                {
                    if (valuesClause is NamedValues namedValues)
                    {
                        var valuesComm = namedValues.GetSqlCommand(keyDefinition);
                        sqlCommand.AppendCommandLine($"\t({valuesComm.Command}),", valuesComm.Parameters);
                    }
                    else if (valuesClause is PositionedValues)
                    {
                        var valuesComm = valuesClause.GetSqlCommand(keyDefinition);
                        sqlCommand.AppendCommandLine($"\t({valuesComm.Command}),", valuesComm.Parameters);
                    }
                }
                sqlCommand.Command = sqlCommand.Command.TrimEnd($",{Environment.NewLine}".ToCharArray()) + Environment.NewLine;
            }

            if (_onConflict != null)
            {
                var onConflict = _onConflict.GetSqlCommand(tableDefinition);
                sqlCommand.AppendCommandLine(onConflict.Command, onConflict.Parameters);
            }

            if (_returningClause != null)
            {
                sqlCommand.AppendCommand($"RETURNING {_returningClause.GetSqlCommand(tableDefinition).Command}");
            }


            return(sqlCommand);
        }