public IEnumerable <ColumnDefinition> GenerateColumnDefinitions(Table table, QuoteType quoteType = QuoteType.NotQuoted)
        {
            List <ColumnDefinition> columns = new List <ColumnDefinition>();

            foreach (var column in table.Columns)
            {
                SqlDataType       sqlDataType = SqlDataType.Parse(column.DataType);
                DataTypeReference dataType    = GenerateDataTypeReference(sqlDataType);
                if (column.IsIdentity)
                {
                    ColumnDefinition columnDef = ScriptFactory.IdentityColumn(column.Name, dataType, CreateIdentityOptions(column), quoteType);
                    columns.Add(columnDef);
                }
                else if (column.RowGuid)
                {
                    if (!string.IsNullOrEmpty(column.DefaultValue))
                    {
                        ColumnDefinition rowGuidCol = ScriptFactory.ColumnDefinition(column.Name, column.DefaultValue, column.DefaultName, dataType, column.AllowNulls, column.RowGuid, quoteType);
                        columns.Add(rowGuidCol);
                    }
                }
                else
                {
                    columns.Add(ScriptFactory.ColumnDefinition(column.Name, dataType, column.AllowNulls, quoteType));
                }
            }

            return(columns);
        }
        public CreateProcedureStatement GenerateInsertStoredProcedure(Table table, QuoteType quoteType = QuoteType.NotQuoted)
        {
            Database database            = table.Parent;
            string   storedProcedureName = string.Concat("Insert", table.Name);

            List <ColumnReferenceExpression> columns           = new List <ColumnReferenceExpression>();
            List <ScalarExpression>          scalarExpressions = new List <ScalarExpression>();
            List <RowValue> rowValues = new List <RowValue>();
            RowValue        rowValue  = ScriptFactory.RowValue();

            rowValues.Add(rowValue);

            List <ProcedureParameter> parameters = new List <ProcedureParameter>();

            foreach (var column in table.Columns)
            {
                if (column.IsPrimaryKey())
                {
                    continue;
                }

                scalarExpressions.Add(
                    ScriptFactory.IdentifierLiteral(
                        CreateProcedureParameterVariableName(column), QuoteType.NotQuoted));

                columns.Add(
                    ScriptFactory.ColumnReferenceExpression(
                        ScriptFactory.MultiPartIdentifier(
                            ScriptFactory.Identifier(column.Name, quoteType))));

                parameters.Add(
                    ScriptFactory.ProcedureParameter(CreateProcedureParameterVariableName(column), false,
                                                     GenerateDataTypeReference(SqlDataType.Parse(column.DataType))));
            }
            rowValue.ColumnValues.AddRange(scalarExpressions);

            StatementList statements = ScriptFactory.List(
                ScriptFactory.PredicateSet(true, SetOptions.NoCount),
                ScriptFactory.Insert(
                    ScriptFactory.InsertSpecification(
                        ScriptFactory.ValuesInsertSource(false, rowValues),
                        ScriptFactory.NamedTableReference(
                            GenerateSchemaObjectName(table, quoteType)),
                        null, null, null, InsertOption.Into, columns)),
                ScriptFactory.Return(ScriptFactory.IntegerLiteral("1")));

            return(ScriptFactory.CreateProcedure(false,
                                                 ScriptFactory.ProcedureReference(
                                                     GenerateStoredProcedureName(storedProcedureName, table, quoteType)),
                                                 ScriptFactory.List(
                                                     ScriptFactory.BeginEndBlock(statements)), null, null, parameters));
        }
        public static List <ColumnDefinition> CreateColumnDefinitions(Table table, QuoteType quoteType = QuoteType.NotQuoted)
        {
            List <ColumnDefinition> columns = new List <ColumnDefinition>();

            foreach (var column in table.Columns)
            {
                //Debug.Print($"CURRENT COLUMN IS {column.Name} FROM TABLE {column.Parent.Name}");

                SqlDataType       sqlDataType = SqlDataType.Parse(column.DataType);
                DataTypeReference dataType    = CreateDataTypeReference(sqlDataType);
                if (column.IsIdentity)
                {
                    ColumnDefinition columnDef = Factory.IdentityColumn(column.Name, dataType, CreateIdentityOptions(column), quoteType);
                    columns.Add(columnDef);
                }
                else
                {
                    columns.Add(Factory.Column(column.Name, dataType, column.AllowNulls, quoteType));
                }
            }

            return(columns);
        }
 private static ProcedureParameter CreateProcedureParameter(Column column)
 {
     return(ScriptFactory.ProcedureParameter(CreateProcedureParameterVariableName(column), false,
                                             GenerateDataTypeReference(SqlDataType.Parse(column.DataType))));
 }