Exemplo n.º 1
0
        /// <summary>
        /// Generates a pair of user defined functions for each enumeration column.
        /// The functions are used to convert enumeration column name/value pairs.
        /// </summary>
        /// <param name="table">The table that may contain enumeration columns.</param>
        internal void GenerateEnumerationFunctions(Table table)
        {
            foreach (Column col in table.Columns)
            {
                if (col.DataType == SqlDbType.TinyInt && col.Properties.Contains("codal_enumeration"))
                {
                    CodeBuilder cb;
                    EnumColumn  objEnum;

                    // Name to value function.
                    cb = new CodeBuilder();
                    SqlGenerator.AddComment(cb);
                    cb.WriteLine("");

                    cb.WriteLine("CREATE FUNCTION dbo.CoDAL_" + table.Name + "_" + col.Name + "_NameToValue (@Param AS VarChar(30)) RETURNS TinyInt AS");
                    cb.WriteLine("");
                    cb.WriteLine("BEGIN");
                    cb.WriteLine(1, "DECLARE @RetVal TinyInt");
                    cb.WriteLine("");
                    cb.WriteLine(1, "SET @RetVal =");
                    cb.WriteLine(2, "CASE");

                    objEnum = new EnumColumn(col);

                    for (int n = 0; n < objEnum.EnumColumnValues.Count; n++)
                    {
                        EnumColumnValue objEnumValue = objEnum.EnumColumnValues[n];
                        cb.WriteLine(2, "WHEN @Param = '" + objEnumValue.Name + "' THEN " + objEnumValue.Value);
                    }

                    cb.WriteLine(2, "ELSE NULL");
                    cb.WriteLine(1, "END");
                    cb.WriteLine("");
                    cb.WriteLine(1, "RETURN(@RetVal)");
                    cb.WriteLine("END");

                    this.AddProcedure("CoDAL_" + table.Name + "_" + col.Name + "_NameToValue", cb.CodeText, false);

                    // Value to name function.
                    cb = new CodeBuilder();
                    SqlGenerator.AddComment(cb);
                    cb.WriteLine("");

                    cb.WriteLine("CREATE FUNCTION dbo.CoDAL_" + table.Name + "_" + col.Name + "_ValueToName (@Param AS TinyInt) RETURNS VarChar(30) AS");
                    cb.WriteLine("");
                    cb.WriteLine("BEGIN");
                    cb.WriteLine(1, "DECLARE @RetVal VarChar(30)");
                    cb.WriteLine("");
                    cb.WriteLine(1, "SET @RetVal =");
                    cb.WriteLine(2, "CASE");

                    objEnum = new EnumColumn(col);

                    for (int n = 0; n < objEnum.EnumColumnValues.Count; n++)
                    {
                        EnumColumnValue objEnumValue = objEnum.EnumColumnValues[n];
                        cb.WriteLine(2, "WHEN @Param = " + objEnumValue.Value + " THEN '" + objEnumValue.Name + "'");
                    }

                    cb.WriteLine(2, "ELSE NULL");
                    cb.WriteLine(1, "END");
                    cb.WriteLine("");
                    cb.WriteLine(1, "RETURN(@RetVal)");
                    cb.WriteLine("END");

                    this.AddProcedure("CoDAL_" + table.Name + "_" + col.Name + "_ValueToName", cb.CodeText, false);
                }
            }
            return;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Builds two constructors.  One is used to initialize a new instance of the business class.  The other
        /// is used by the retrieval methods to build an instance based on a current row in the table.
        /// </summary>
        /// <param name="cb">The CodeBuilder that this region should be added to.</param>
        /// <param name="table">The table that code is being built for.</param>
        private static void BuildConstructorsRegion(CodeBuilder cb, Table table)
        {
            // Start region.
            cb.WriteLine(1, "#region Constructors");
            cb.WriteLine("");

            // Build a no parameter constructor.
            cb.WriteLine(2, "protected " + table.Name + "Base()");
            cb.WriteLine(2, "{");

            foreach (Column objColumn in table.Columns)
            {
                cb.Write(3, "this._" + objColumn.Name + " = ");

                switch (objColumn.DataType)
                {
                case SqlDbType.TinyInt:
                    if (objColumn.Properties.Contains("codal_enumeration"))
                    {
                        EnumColumn objEnumColumn = new EnumColumn(objColumn);
                        cb.Write(objColumn.Name + "Enum." + objEnumColumn.EnumColumnValues[0].Name + ";");
                    }
                    else if (objColumn.AllowNulls)
                    {
                        cb.Write("null;");
                    }
                    else
                    {
                        //cb.Write("Blank" + objColumn.Name + ";");
                        cb.Write(objColumn.GetBlankValueForType());
                        cb.Write(";");
                    }
                    break;

                case SqlDbType.Bit:
                    cb.Write("false;");
                    break;

                case SqlDbType.Int:
                case SqlDbType.SmallInt:
                case SqlDbType.BigInt:
                case SqlDbType.DateTime:
                case SqlDbType.SmallDateTime:
                case SqlDbType.Decimal:
                case SqlDbType.Money:
                case SqlDbType.SmallMoney:
                case SqlDbType.Char:
                case SqlDbType.VarChar:
                case SqlDbType.Text:
                case SqlDbType.NChar:
                case SqlDbType.NVarChar:
                case SqlDbType.NText:
                    if (objColumn.AllowNulls)
                    {
                        cb.Write("null;");
                    }
                    else
                    {
                        //cb.Write("Blank" + objColumn.Name + ";");
                        cb.Write(objColumn.GetBlankValueForType());
                        cb.Write(";");
                    }
                    break;

                default:
                    throw new NotSupportedException("Unsupported data type in constructor");
                }

                cb.WriteLine("");
            }

            cb.WriteLine(2, "}");
            cb.WriteLine("");

            // Build a  constructor that takes a reader object.
            cb.WriteLine(2, "protected " + table.Name + "Base" + "(SqlDataReader reader)");
            cb.WriteLine(2, "{");

            foreach (Column objColumn in table.Columns)
            {
                if (objColumn.AllowNulls == false)
                {
                    cb.Write(3, "this._" + objColumn.Name + " = ");
                    if (objColumn.Properties.Contains("codal_enumeration"))
                    {
                        cb.Write("(" + objColumn.Name + "Enum) ");
                    }
                    cb.WriteLine("reader." + objColumn.DataType.GetReaderFunction() + "((byte) Columns." + objColumn.Name + ");");
                }
                else
                {
                    cb.WriteLine(3, "if (reader.IsDBNull((byte) Columns." + objColumn.Name + "))");
                    //cb.WriteLine(4, "this._" + objColumn.Name + " = Blank" + objColumn.Name + ";");
                    cb.WriteLine(4, "this._" + objColumn.Name + " = null;");
                    cb.WriteLine(3, "else");
                    cb.WriteLine(4, "this._" + objColumn.Name + " = reader." + objColumn.DataType.GetReaderFunction() + "((byte) Columns." + objColumn.Name + ");");
                }
            }

            cb.WriteLine(2, "}");

            // End region.
            cb.WriteLine("");
            cb.WriteLine(1, "#endregion");
            cb.WriteLine("");
        }
Exemplo n.º 3
0
 /// <summary>
 /// Initializes an EnumColumnValue.
 /// </summary>
 /// <param name="enumColumn">The EnumColumn that this EnumColumnValue belongs to.</param>
 /// <param name="value">The underlying integer value.</param>
 /// <param name="name">The name.</param>
 internal EnumColumnValue(EnumColumn enumColumn, byte value, string name)
 {
     this._EnumColumn = enumColumn;
     this._Value      = value;
     this._Name       = name;
 }
Exemplo n.º 4
0
        /// <summary>
        /// Builds a region containing enumerations.  The enumerations consist of a Columns enumeration
        /// which contains the oridinal positions of columns in the table, as well as an enuemration for
        /// each TinyInt column that has a codegen_enumration extended property.
        /// </summary>
        /// <param name="cb">The CodeBuilder that this region should be added to.</param>
        /// <param name="table">The table that code is being built for.</param>
        private static void BuildEnumerationsRegion(CodeBuilder cb, Table table)
        {
            // Start region.
            cb.WriteLine(1, "#region Enumerations");
            cb.WriteLine("");

            // Columns enumeration.
            cb.WriteLine(2, "public enum Columns : byte");
            cb.WriteLine(2, "{");

            for (int n = 0; n < table.Columns.Count; n++)
            {
                Column objColumn = table.Columns[n];
                cb.Write(3, objColumn.Name + " = " + n.ToString());

                // Add a column for all but the last value.
                if (n == table.Columns.Count - 1)
                {
                    cb.WriteLine("");
                }
                else
                {
                    cb.WriteLine(",");
                }
            }

            cb.WriteLine(2, "}");

            // TinyInt enumeration columns.
            foreach (Column objColumn in table.Columns)
            {
                if (objColumn.DataType == SqlDbType.TinyInt && objColumn.Properties.Contains("codal_enumeration"))
                {
                    EnumColumn objEnum = new EnumColumn(objColumn);

                    cb.WriteLine("");
                    cb.WriteLine(2, "public enum " + objEnum.Name + " : byte");
                    cb.WriteLine(2, "{");

                    for (int n = 0; n < objEnum.EnumColumnValues.Count; n++)
                    {
                        EnumColumnValue objEnumValue = objEnum.EnumColumnValues[n];
                        cb.Write(3, objEnumValue.Name + " = " + objEnumValue.Value.ToString());

                        // Add a column for all but the last value.
                        if (n == objEnum.EnumColumnValues.Count - 1)
                        {
                            cb.WriteLine("");
                        }
                        else
                        {
                            cb.WriteLine(",");
                        }
                    }

                    cb.WriteLine(2, "}");
                }
            }

            // End region.
            cb.WriteLine("");
            cb.WriteLine(1, "#endregion");
            cb.WriteLine("");
        }