Exemplo n.º 1
0
        private static bool CovertDataValue(SchemaTable schemaTable, SchemaColumn schemaColumn, ref object value)
        {
            if (value is DateTime && value.ToDateTime() < MathUtils.SqlMinDate)
            {
                return(false);
            }

            //序列化Json
            if (schemaColumn.IsSerialized)
            {
                if (schemaColumn.DbType == ColumnDbType.LongBlob || schemaColumn.DbType == ColumnDbType.Blob)
                {
                    value = SerializeBinaryObject(schemaTable, schemaColumn, value);
                }
                else
                {
                    value = SerializeJson(schemaTable, schemaColumn, value);
                }
                if (value == null)
                {
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 2
0
 private static object DeserializeJsonObject(SchemaTable schemaTable, AbstractEntity entity, object value,
                                             SchemaColumn fieldAttr, string columnName)
 {
     try
     {
         if (fieldAttr.ColumnType.IsSubclassOf(typeof(Array)))
         {
             value = value.ToString().StartsWith("[") ? value : "[" + value + "]";
         }
         string tempValue = value.ToNotNullString();
         if (!string.IsNullOrEmpty(fieldAttr.JsonDateTimeFormat) &&
             tempValue.IndexOf(@"\/Date(") == -1)
         {
             return(JsonUtils.DeserializeCustom(tempValue, fieldAttr.ColumnType, fieldAttr.JsonDateTimeFormat));
         }
         else
         {
             return(JsonUtils.Deserialize(tempValue, fieldAttr.ColumnType));
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Table:{0} key:{1} column:{2} deserialize json error:{3} to {4}\r\nException:{5}",
                             schemaTable.EntityName,
                             entity.GetKeyCode(),
                             columnName,
                             value,
                             fieldAttr.ColumnType.FullName,
                             ex);
     }
     return(null);
 }
Exemplo n.º 3
0
        private static bool CovertDataValue(SchemaTable schemaTable, SchemaColumn schemaColumn, ref object value)
        {
            if (value is DateTime && value.ToDateTime() < MathUtils.SqlMinDate)
            {
                return(false);
            }

            //序列化Json
            if (schemaColumn.IsJson)
            {
                try
                {
                    value = value ?? string.Empty;
                    if (!string.IsNullOrEmpty(schemaColumn.JsonDateTimeFormat))
                    {
                        value = JsonUtils.SerializeCustom(value);
                    }
                    else
                    {
                        value = JsonUtils.Serialize(value);
                    }
                }
                catch (Exception ex)
                {
                    TraceLog.WriteError("Table:{0} column:\"{0}\" json serialize error:\r\n:{1}",
                                        schemaTable.Name,
                                        schemaColumn.Name,
                                        ex);
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 4
0
        private void SetEntityValue(AbstractEntity entity, SchemaColumn fieldAttr, object value)
        {
            string columnName = fieldAttr.Name;
            object fieldValue;

            if (fieldAttr.IsSerialized)
            {
                //指定序列化方式
                if (fieldAttr.DbType == ColumnDbType.LongBlob || fieldAttr.DbType == ColumnDbType.Blob)
                {
                    fieldValue = DeserializeBinaryObject(value, fieldAttr);
                }
                else
                {
                    fieldValue = DeserializeJsonObject(value, fieldAttr);
                }
                if (fieldValue is EntityChangeEvent)
                {
                    ((EntityChangeEvent)fieldValue).PropertyName = columnName;
                }
            }
            else
            {
                fieldValue = AbstractEntity.ParseValueType(value, fieldAttr.ColumnType);
            }
            if (fieldAttr.CanWrite)
            {
                entity.SetPropertyValue(columnName, fieldValue);
            }
            else
            {
                entity.SetFieldValue(columnName, fieldValue);
            }
        }
Exemplo n.º 5
0
            /// <summary>
            /// Adds a column
            /// </summary>
            public Builder AddColumn(string name, DbType type, bool allowNull = true, int size = -1)
            {
                var col = new SchemaColumn(name, type, allowNull);

                this.columns.Add(col);
                return(this);
            }
        /// <summary>
        ///		Carga las columnas de la vista
        /// </summary>
        private void LoadColumns(SQLServerProvider objConnection, SchemaView objView)
        {
            ParametersDBCollection objColParameters = new ParametersDBCollection();
            string strSQL;

            // Asigna lo parámetros
            objColParameters.Add("@View_Catalog", objView.Catalog);
            objColParameters.Add("@View_Schema", objView.Schema);
            objColParameters.Add("@View_Name", objView.Name);
            // Crea la cadena SQL
            strSQL = @"SELECT Table_Catalog, Table_Schema, Table_Name, Column_Name
											 FROM Information_Schema.View_Column_Usage
											 WHERE View_Catalog = @View_Catalog
												 AND View_Schema = @View_Schema
												 AND View_Name = @View_Name"                                                ;
            // Carga las columnas
            using (IDataReader rdoColumns = objConnection.ExecuteReader(strSQL, objColParameters, CommandType.Text))
            {                                     // Lee los registros
                while (rdoColumns.Read())
                {
                    SchemaColumn objColumn = new SchemaColumn(objView.Parent);

                    // Carga los datos de la columna
                    objColumn.Catalog = (string)rdoColumns.IisNull("Table_Catalog");
                    objColumn.Schema  = (string)rdoColumns.IisNull("Table_Schema");
                    objColumn.Table   = (string)rdoColumns.IisNull("Table_Name");
                    objColumn.Name    = (string)rdoColumns.IisNull("Column_Name");
                    // Añade la columna a la colección
                    objView.Columns.Add(objColumn);
                }
                // Cierra el recordset
                rdoColumns.Close();
            }
        }
Exemplo n.º 7
0
        private string BuildUpdateColumn(SchemaColumn column)
        {
            var sb = new StringBuilder();

            sb.Append(column.Name).Append(" ").Append(column.DbTypeNormalized)
            .Append(column.Nullable ? " NULL" : " NOT NULL");
            return(sb.ToString());
        }
Exemplo n.º 8
0
        protected virtual object GetFieldValue(DbDataReader rdr, int ordinal, SchemaColumn col)
        {
            switch (col.Column.DataType)
            {
            case SQDataTypes.Boolean:
                return(rdr.GetBoolean(ordinal));

            case SQDataTypes.Bytes:
                MemoryStream ms    = new MemoryStream();
                byte[]       bytes = new byte[8000];
                long         read  = 0;
                while ((read = rdr.GetBytes(ordinal, 0, bytes, 0, bytes.Length)) > 0)
                {
                    ms.Write(bytes, 0, Convert.ToInt32(read));
                }
                if (col.Property.PropertyType == typeof(byte[]))
                {
                    return(ms.ToArray());
                }
                return(ms.ToArray());

                break;

            case SQDataTypes.DateTime:
                return(rdr.GetDateTime(ordinal));

            case SQDataTypes.Decimal:
                return(rdr.GetDecimal(ordinal));

            case SQDataTypes.Float:
                return(rdr.GetFloat(ordinal));

            case SQDataTypes.Int16:
                Int16 small = rdr.GetInt16(ordinal);
                if (col.Property.PropertyType == typeof(Byte))
                {
                    return(Convert.ToByte(small));
                }
                return(small);

            case SQDataTypes.Int32:
                return(rdr.GetInt32(ordinal));

            case SQDataTypes.Int64:
                Int64 value = rdr.GetInt64(ordinal);
                if (col.Property.PropertyType.IsEnum)
                {
                    return(Enum.ToObject(col.Property.PropertyType, value));
                }
                return(value);

            case SQDataTypes.String:
                return(rdr.GetString(ordinal));
            }

            return(null);
        }
Exemplo n.º 9
0
 private object DeserializeBinaryObject(object value, SchemaColumn fieldAttr)
 {
     if (value is byte[])
     {
         byte[] buffer = value as byte[];
         return(ProtoBufUtils.Deserialize(buffer, fieldAttr.ColumnType));
     }
     throw new Exception(string.Format("The {0} column value is not byte[] type.", fieldAttr.Name));
 }
Exemplo n.º 10
0
 private static string MapDataType(SchemaColumn column)
 {
     return(column.DataType switch
     {
         "text" or "varchar" => "string",
         "date" or "datetime" or "timestamp" => "date",
         "bit" => "boolean",
         "tinyint" or "smallint" or "mediumint" or "int" or "bigint" or "decimal" or "double" => "numeric",
         _ => "unknown",
     });
Exemplo n.º 11
0
        private object GetPropertyValue <T>(T data, SchemaColumn column) where T : ISqlEntity
        {
            object value = null;

            if (data is AbstractEntity)
            {
                value = (data as AbstractEntity).GetPropertyValue(column.CanRead, column.Name);
                CovertDataValue(column, ref value);
            }
            return(value);
        }
Exemplo n.º 12
0
        /* Methods */

        /// <inheritdoc />
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            SchemaColumn column = value as SchemaColumn;

            if (column == null)
            {
                return(null);
            }

            return(new SchemaColumn[] { column });
        }
Exemplo n.º 13
0
        /// <summary>
        ///		Obtiene el tipo de datos de una columna
        /// </summary>
        private string GetDataType(SchemaColumn objColumn)
        {
            string strType = objColumn.DataType;

            // Añade los datos
            if (objColumn.CharacterMaximumLength > 0)
            {
                strType += $"({objColumn.CharacterMaximumLength})";
            }
            // Devuelve el tipo
            return(strType);
        }
Exemplo n.º 14
0
        private void SetPropertyFunc <T>(T entity, SchemaColumn column, object fieldValue) where T : new()
        {
            var t = entity as AbstractEntity;

            if (t != null)
            {
                t.Init();
                t.SetValueBefore();
                SetEntityValue(t, column, fieldValue);
                t.SetValueAfter();
            }
        }
Exemplo n.º 15
0
 /// <summary>
 ///		Comprueba si una columna es una clave foránea
 /// </summary>
 private bool CheckIsForeignKey(SchemaTable objTable, SchemaColumn objColumn)
 {         // Recorre las restricciones comprobando si es una clave foránea
     foreach (SchemaConstraint objConstraint in objTable.Constraints)
     {
         if (objConstraint.Type == SchemaConstraint.ConstraintType.ForeignKey &&
             objColumn.Name.EqualsIgnoreCase(objConstraint.Column))
         {
             return(true);
         }
     }
     // Si ha llegado hasta aquí es porque no es una clave foránea
     return(false);
 }
Exemplo n.º 16
0
 private static object SerializeJson(SchemaColumn schemaColumn, object value)
 {
     value = value ?? string.Empty;
     if (!string.IsNullOrEmpty(schemaColumn.JsonDateTimeFormat))
     {
         value = JsonUtils.SerializeCustom(value);
     }
     else
     {
         value = JsonUtils.Serialize(value);
     }
     return(value);
 }
Exemplo n.º 17
0
        private static object DeserializeJsonObject(object value, SchemaColumn fieldAttr)
        {
            if (fieldAttr.ColumnType.IsSubclassOf(typeof(Array)))
            {
                value = value.ToString().StartsWith("[") ? value : "[" + value + "]";
            }
            string tempValue = value.ToNotNullString();

            if (!string.IsNullOrEmpty(fieldAttr.JsonDateTimeFormat) &&
                tempValue.IndexOf(@"\/Date(", StringComparison.Ordinal) == -1)
            {
                return(JsonUtils.DeserializeCustom(tempValue, fieldAttr.ColumnType, fieldAttr.JsonDateTimeFormat));
            }
            return(JsonUtils.Deserialize(tempValue, fieldAttr.ColumnType));
        }
Exemplo n.º 18
0
 static void WriteType(TextWriter w, SchemaColumn col)
 {
     w.Write(":");
     w.Write(col.DbType.ToString());
     if (HasLength(col.DbType))
     {
         w.Write("[");
         w.Write(col.ColumnSize?.ToString() ?? "*");
         w.Write("]");
     }
     if (col.AllowDBNull != false)
     {
         w.Write("?");
     }
 }
Exemplo n.º 19
0
 private static object SerializeBinaryObject(SchemaTable schemaTable, SchemaColumn schemaColumn, object value)
 {
     try
     {
         value = ProtoBufUtils.Serialize(value);
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Table:{0} column:\"{0}\" serialize error:\r\n:{1}",
                             schemaTable.EntityName,
                             schemaColumn.Name,
                             ex);
         return(null);
     }
     return(value);
 }
Exemplo n.º 20
0
        internal string GetSqlType(SchemaColumn column)
        {
            if (column.IsIdentity)
            {
                return(this.IdentityType);
            }

            switch (column.DbType)
            {
            case DbType.String:
                if (column.Size == -1)
                {
                    return("text");
                }

                return("VARCHAR(" + column.Size + ") ");

            case DbType.Int32:
                return("INTEGER ");

            case DbType.Int64:
                return("BIGINT  ");

            case DbType.Decimal:
                return("NUMERIC(" + column.Precision + "," + column.Scale + ") ");

            case DbType.Double:
                return("DOUBLE PRECISION ");

            case DbType.Boolean:
                return("BOOLEAN ");

            case DbType.Date:
            case DbType.DateTime:
                return("TIMESTAMP ");

            case DbType.Guid:
                return("UUID ");

            case DbType.Binary:
                return("BYTEA ");

            default:
                return("!UNKNOWN VALUE TYPE!");
            }
        }
Exemplo n.º 21
0
        private static void CovertDataValue(SchemaColumn schemaColumn, ref object value)
        {
            if (value is DateTime && value.ToDateTime() < MathUtils.SqlMinDate)
            {
                value = MathUtils.SqlMinDate;
                return;
            }

            //序列化Json
            if (schemaColumn.IsSerialized)
            {
                if (schemaColumn.DbType == ColumnDbType.LongBlob || schemaColumn.DbType == ColumnDbType.Blob)
                {
                    value = SerializeBinaryObject(value);
                }
                else
                {
                    value = SerializeJson(schemaColumn, value);
                }
            }
        }
Exemplo n.º 22
0
        // ---------------

        private string BuildCreateColumn(SchemaColumn column)
        {
            var sb = new StringBuilder();

            sb.Append(column.Name)
            .Append(" ")
            .Append(column.DbTypeNormalized);

            if (column.PrimaryKey)
            {
                sb.Append(" IDENTITY(1,1)");
            }
            else
            {
                if (!string.IsNullOrEmpty(column.DefaultValueNormalizsed))
                {
                    sb.Append(" DEFAULT (").Append(column.DefaultValueNormalizsed).Append(")");
                }
            }

            sb.Append(column.Nullable ? " NULL" : " NOT NULL");
            return(sb.ToString());
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="column"></param>
        /// <param name="value"></param>
        protected virtual void SetPropertyValue(T entity, SchemaColumn column, object value)
        {
            object fieldValue;

            if (column.IsSerialized)
            {
                //指定序列化方式
                if (column.DbType == ColumnDbType.LongBlob ||
                    column.DbType == ColumnDbType.Blob)
                {
                    fieldValue = ProtoBufUtils.Deserialize(value as byte[], column.ColumnType);
                }
                else
                {
                    fieldValue = DeserializeJsonObject(value, column);
                }
            }
            else
            {
                fieldValue = AbstractEntity.ParseValueType(value, column.ColumnType);
            }
            ObjectAccessor.Create(entity)[column.Name] = fieldValue;
        }
Exemplo n.º 24
0
 private static object SerializeJson(SchemaTable schemaTable, SchemaColumn schemaColumn, object value)
 {
     try
     {
         value = value ?? string.Empty;
         if (!string.IsNullOrEmpty(schemaColumn.JsonDateTimeFormat))
         {
             value = JsonUtils.SerializeCustom(value);
         }
         else
         {
             value = JsonUtils.Serialize(value);
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Table:{0} column:\"{0}\" json serialize error:\r\n:{1}",
                             schemaTable.EntityName,
                             schemaColumn.Name,
                             ex);
         return(null);
     }
     return(value);
 }
Exemplo n.º 25
0
 private static void PushChildStack(MessageStructure parent, SchemaColumn parentColumn, object value)
 {
     if (parentColumn.IsDictionary)
     {
         var     column = parentColumn.Children[1];
         dynamic dict   = value;
         dynamic keys   = dict.Keys;
         int     count  = dict.Count;
         parent.PushIntoStack(count);
         foreach (var key in keys)
         {
             object item       = dict[key];
             var    itemWriter = new MessageStructure();
             itemWriter.PushIntoStack(key);
             if (EntitySchemaSet.IsSupportType(column.ColumnType))
             {
                 itemWriter.PushIntoStack(column.ColumnType, item);
             }
             else if (column.HasChild)
             {
                 PushChildStack(itemWriter, column, item);
             }
             parent.PushIntoStack(itemWriter);
         }
     }
     else if (parentColumn.IsList)
     {
         var     column = parentColumn.Children[0];
         dynamic list   = value;
         int     count  = list.Count;
         parent.PushIntoStack(count);
         foreach (var item in list)
         {
             var itemWriter = new MessageStructure();
             if (EntitySchemaSet.IsSupportType(column.ColumnType))
             {
                 itemWriter.PushIntoStack(column.ColumnType, item);
             }
             else if (column.HasChild)
             {
                 PushChildStack(itemWriter, column, item);
             }
             parent.PushIntoStack(itemWriter);
         }
     }
     else
     {
         //child entity object
         parent.PushIntoStack(1);
         var typeAccessor = ObjectAccessor.Create(value, true);
         var itemWriter   = new MessageStructure();
         foreach (var column in parentColumn.Children)
         {
             try
             {
                 var fieldValue = typeAccessor[column.Name];
                 if (EntitySchemaSet.IsSupportType(column.ColumnType))
                 {
                     itemWriter.PushIntoStack(column.ColumnType, fieldValue);
                 }
                 else if (column.HasChild)
                 {
                     PushChildStack(itemWriter, column, fieldValue);
                 }
             }
             catch
             {
             }
         }
         parent.PushIntoStack(itemWriter);
     }
 }
Exemplo n.º 26
0
 protected void OnSetProperty(MemoryData entity, SchemaColumn column, object value)
 {
     ObjectAccessor.Create(entity)[column.Name] = value;
 }
Exemplo n.º 27
0
 protected override object GetPropertyValue(MemoryData entity, SchemaColumn column)
 {
     return(ObjectAccessor.Create(entity)[column.Name]);
 }
Exemplo n.º 28
0
        public virtual void Insert(object o)
        {
            if (o != null)
            {
                SchemaTable t = Schema.EnsureSchema(o.GetType());
                if (t != null)
                {
                    SQInsertQuery q = new SQInsertQuery()
                    {
                        Table    = new SQAliasableObject(t.Table.Name),
                        ReturnID = t.GetPrimaryKeyColumn() != null && t.GetPrimaryKeyColumn().Column.IsIdentity
                    };
                    PopulateSetQuery(q, o, t);
                    SQSelectResult sr = Adp.Insert(q);
                    try
                    {
                        if (q.ReturnID)
                        {
                            if (sr.Reader.Read())
                            {
                                SchemaColumn pkCol = t.GetPrimaryKeyColumn();
                                object       id    = sr.Reader.GetValue(0);
                                if (id.GetType() != pkCol.Property.PropertyType)
                                {
                                    switch (pkCol.Column.DataType)
                                    {
                                    case SQDataTypes.Int16:
                                        id = Convert.ToInt16(id);
                                        break;

                                    case SQDataTypes.Int32:
                                        id = Convert.ToInt32(id);
                                        break;

                                    case SQDataTypes.Int64:
                                        id = Convert.ToInt64(id);
                                        break;

                                    case SQDataTypes.Decimal:
                                        id = Convert.ToDecimal(id);
                                        break;
                                    }
                                }

                                if (o is IPopulateProperties)
                                {
                                    ((IPopulateProperties)o).PopulateProperty(pkCol.Property.Name, id);
                                }
                                else
                                {
                                    pkCol.Property.SetValue(o, id, null);
                                }
                            }
                        }
                    }
                    finally
                    {
                        sr.Close();
                    }
                }
                else
                {
                    throw new InvalidTypeException(o.GetType());
                }
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="column"></param>
 /// <returns></returns>
 protected virtual object GetPropertyValue(T entity, SchemaColumn column)
 {
     return(ObjectAccessor.Create(entity)[column.Name]);
 }
Exemplo n.º 30
0
 private object DeserializeBinaryObject(SchemaTable schemaTable, AbstractEntity entity, object value, SchemaColumn fieldAttr, string columnName)
 {
     try
     {
         if (value is byte[])
         {
             byte[] buffer = value as byte[];
             return(ProtoBufUtils.Deserialize(buffer, fieldAttr.ColumnType));
         }
         throw new Exception("value is not byte[] type.");
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Table:{0} key:{1} column:{2} deserialize binary error:byte[] to {3}\r\nException:{4}",
                             schemaTable.EntityName,
                             entity.GetKeyCode(),
                             columnName,
                             fieldAttr.ColumnType.FullName,
                             ex);
     }
     return(null);
 }