Example #1
0
 public EntityChange(IEntityInfo entityInfo)
     : this()
 {
     _entityInfo      = entityInfo;
     EntityName       = entityInfo.GetNameInStore();
     HasAutoIncrement = entityInfo.PrimaryKey.KeyScheme == KeyScheme.Identity;
 }
 public SolvableEntityConflict(IEntityInfo entityInfo, ISyncSessionInfo syncSessionInfo)
     : this()
 {
     _entityInfo      = entityInfo;
     _syncSessionInfo = syncSessionInfo;
     EntityName       = entityInfo.GetNameInStore();
 }
Example #3
0
        public IDbCommand ToUpdateCommand(IEntityInfo entity, object item)
        {
            const string  sqlCommandText = "UPDATE [{0}] SET {1} WHERE {2}";
            StringBuilder value          = null;

            StringBuilder where = null;
            var @params = new List <IDataParameter>();

            var sqlFactory = _datastore.SqlFactory;

            foreach (var field in entity.Fields)
            {
                var fieldValue = field.ToSqlValue(item);
                var paramName  = sqlFactory.AddParam(fieldValue, @params);
                if (field.IsPrimaryKey)
                {
                    where = AddWhere(where, string.Format("{0} = {1}", field.FieldName, paramName));
                    continue;
                }

                value = AddValue(value, string.Format("{0} = {1}", field.FieldName, paramName));
            }

            var connection = _datastore.GetConnection();
            var update     = connection.CreateCommand();

            update.CommandText = string.Format(sqlCommandText, entity.GetNameInStore(), value, where);
            SetCommandParam(@params, update);
            return(update);
        }
Example #4
0
        private IDbCommand ToInsertCommand(IEntityInfo entity, object item)
        {
            const string  sqlCommandText = "INSERT INTO [{0}] ({1}) VALUES ({2})";
            StringBuilder key            = null;
            StringBuilder value          = null;
            var           @params        = new List <IDataParameter>();

            var sqlFactory = _datastore.SqlFactory;

            foreach (var field in entity.Fields)
            {
                if (field.IsPrimaryKey && ((PrimaryKey)field).KeyScheme == KeyScheme.Identity)
                {
                    continue;
                }

                var fieldValue = field.ToSqlValue(item);
                var paramName  = sqlFactory.AddParam(fieldValue, @params);
                key   = AddValue(key, field.ToInsertStatement());
                value = AddValue(value, paramName);
            }

            var connection = _datastore.GetWriteConnection();
            var insert     = connection.CreateCommand();

            insert.CommandText = string.Format(sqlCommandText, entity.GetNameInStore(), key, value);
            SetCommandParam(@params, insert);
            return(insert);
        }
Example #5
0
        public IDbCommand ToDeleteCommand(IEntityInfo entity, object item)
        {
            const string sqlCommandText = "DELETE FROM [{0}] WHERE {1}";

            StringBuilder where = null;
            var @params = new List <IDataParameter>();

            var sqlFactory = _datastore.SqlFactory;

            foreach (var field in entity.Fields)
            {
                var fieldValue = field.ToSqlValue(item);
                var paramName  = sqlFactory.AddParam(fieldValue, @params);
                if (!field.IsPrimaryKey)
                {
                    continue;
                }

                where = AddWhere(where, $"{field.FieldName} = {paramName}");
            }

            var connection = _datastore.GetWriteConnection();
            var delete     = connection.CreateCommand();

            delete.CommandText = string.Format(sqlCommandText, entity.GetNameInStore(), where);
            SetCommandParam(@params, delete);
            return(delete);
        }
Example #6
0
        public static EntityChangeset Create(ISqlDataStore dataStore, IEntityInfo syncEntity, ISyncSessionInfo syncSessionInfo)
        {
            var entityName = syncEntity.GetNameInStore();

            var result = new EntityChangeset(entityName)
            {
                _syncSession = syncSessionInfo
            };

            result.SetDatastore(dataStore);
            return(result);
        }
Example #7
0
        public void ValidateTable(IEntityInfo entity)
        {
            var entityName = entity.GetNameInStore();
            var connection = _datastore.GetConnection();

            // first make sure the table exists
            if (_datastore.TableExists(entityName))
            {
                return;
            }

            _datastore.CreateTable(connection, entity);
        }
Example #8
0
        private void EnsureCompatibility(IDbConnection connection, IEntityInfo entity)
        {
            var tableName = entity.GetNameInStore();

            if (!TableExists(tableName))
            {
                CreateTable(connection, entity);
            }
            else
            {
                ValidateTable(entity);
            }
        }
Example #9
0
        public Field(IEntityInfo entity, PropertyInfo prop, FieldAttribute fieldAttribute)
        {
            Entity       = entity;
            PropertyInfo = prop;
            if (fieldAttribute != null)
            {
                RequireUniqueValue = fieldAttribute.RequireUniqueValue;
                SearchOrder        = fieldAttribute.SearchOrder;
                FieldName          = fieldAttribute.FieldName ?? prop.Name;
                FullFieldName      = string.Format("[{0}].[{1}]", Entity.GetNameInStore(), FieldName);
                AliasFieldName     = string.Format("{0}{1}", Entity.GetNameInStore(), FieldName);

                IsCreationTracking = fieldAttribute.IsCreationTracking;
                IsUpdateTracking   = fieldAttribute.IsUpdateTracking;
                IsDeletionTracking = fieldAttribute.IsDeletionTracking;
                IsLastSyncTracking = fieldAttribute.IsLastSyncTracking;
            }

            if (prop != null)
            {
                FieldProperties = FieldPropertyFactory.Create(prop.PropertyType, fieldAttribute);
            }
        }
Example #10
0
        public IDbCommand FindExisting(ISqlDataStore dataStore, EntityChange entityChange)
        {
            const string sqlCommandText = "SELECT * FROM [{0}] WHERE {1}";
            var          @params        = new List <IDataParameter>();

            var sqlFactory = dataStore.SqlFactory;

            var where = BuildWhereIdentity(entityChange, _entityInfo, sqlFactory, @params);

            var select = sqlFactory.CreateCommand();

            select.CommandText = string.Format(sqlCommandText, _entityInfo.GetNameInStore(), where);
            SetCommandParam(@params, select);
            return(select);
        }
Example #11
0
        public string CreateTable(IEntityInfo entity)
        {
            var sql = new StringBuilder();

            sql.AppendFormat("CREATE TABLE [{0}] (", entity.GetNameInStore());

            var first = true;

            foreach (var field in entity.Fields)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sql.Append(", ");
                }

                sql.AppendFormat(field.GetFieldDefinition());
            }

            foreach (var field in entity.Fields)
            {
                var constraint = field.GetFieldConstraint();
                if (string.IsNullOrEmpty(constraint))
                {
                    continue;
                }

                sql.AppendFormat(", {0}", constraint);
            }

            sql.Append(")");

            OrmDebug.Info(sql.ToString());
            return(sql.ToString());
        }
Example #12
0
 private string BuildJoin()
 {
     return(string.Format("{0} [{1}]", _joinClause, _entityJoin.GetNameInStore()));
 }
Example #13
0
        public void CreateTable(IDbConnection connection, IEntityInfo entity)
        {
            var sql = new StringBuilder();
            var entityNameInStore = entity.GetNameInStore();

            if (ReservedWords.Contains(entityNameInStore, StringComparer.InvariantCultureIgnoreCase))
            {
                throw new ReservedWordException(entityNameInStore);
            }

            sql.AppendFormat("CREATE TABLE [{0}] (", entityNameInStore);

            var first = true;

            foreach (var field in entity.Fields)
            {
                if (ReservedWords.Contains(field.FieldName, StringComparer.InvariantCultureIgnoreCase))
                {
                    throw new ReservedWordException(field.FieldName);
                }

                if (first)
                {
                    first = false;
                }
                else
                {
                    sql.Append(", ");
                }

                sql.AppendFormat(field.GetFieldDefinitionSqlQuery());
            }

            foreach (var foreignKey in entity.ForeignKeys)
            {
                sql.Append(", ");
                sql.AppendFormat(foreignKey.GetTableCreateSqlQuery());
            }

            sql.Append(")");

            OrmDebug.Info(sql.ToString());


            using (var command = SqlFactory.CreateCommand())
            {
                command.CommandText = sql.ToString();
                command.Connection  = connection;
                command.Transaction = CurrentTransaction;
                command.ExecuteNonQuery();
            }

            VerifiyPrimaryKey(entity.PrimaryKey);

            foreach (var foreignKey in entity.ForeignKeys)
            {
                VerifyForeignKey(foreignKey);
            }

            foreach (var index in entity.Indexes)
            {
                VerifyIndex(index);
            }
        }
Example #14
0
        public void ValidateTable(IEntityInfo entity)
        {
            var entityName = entity.GetNameInStore();
            var connection = _datastore.GetConnection();

            // first make sure the table exists
            if (!_datastore.TableExists(entityName))
            {
                _datastore.CreateTable(connection, entity);
                return;
            }

            using (var command = new SqlCeCommand())
            {
                command.Transaction = _datastore.CurrentTransaction as SqlCeTransaction;
                command.Connection  = connection as SqlCeConnection;

                foreach (var field in entity.Fields)
                {
                    // yes, I realize hard-coded ordinals are not a good practice, but the SQL isn't changing, it's method specific
                    var sql = string.Format("SELECT column_name, "         // 0
                                            + "data_type, "                // 1
                                            + "character_maximum_length, " // 2
                                            + "numeric_precision, "        // 3
                                            + "numeric_scale, "            // 4
                                            + "is_nullable "
                                            + "FROM information_schema.columns "
                                            + "WHERE (table_name = '{0}' AND column_name = '{1}')",
                                            entityName, field.FieldName);

                    command.CommandText = sql;

                    using (var reader = command.ExecuteReader())
                    {
                        if (!reader.Read())
                        {
                            // field doesn't exist - we must create it
                            var alter = new StringBuilder(string.Format("ALTER TABLE [{0}] ", entity.GetNameInStore()));
                            alter.Append(string.Format("ADD {0}", field.GetFieldDefinitionSqlQuery()));

                            using (var altercmd = new SqlCeCommand(alter.ToString(), connection as SqlCeConnection))
                            {
                                altercmd.ExecuteNonQuery();
                            }
                        }
                    }
                }

                _datastore.VerifiyPrimaryKey(entity.PrimaryKey);

                foreach (var foreignKey in entity.ForeignKeys)
                {
                    _datastore.VerifyForeignKey(foreignKey);
                }

                foreach (var index in entity.Indexes)
                {
                    _datastore.VerifyIndex(index);
                }
            }
        }
Example #15
0
 /// <summary>
 /// Get entity name in store
 /// </summary>
 public string GetNameInStore()
 {
     return(_syncEntity.GetNameInStore());
 }
Example #16
0
 /// <summary>
 /// Convert part to sql string equivalent
 /// </summary>
 /// <param name="params">existing param list to populate in case of part object value</param>
 /// <returns>Sql string representation</returns>
 public string ToStatement(List <IDataParameter> @params)
 {
     return(string.Concat("[", _entity.GetNameInStore(), "]", ".", "[", _columnName, "]"));
 }
Example #17
0
File: Join.cs Project: sGeeK44/Orm
 private string BuildJoin()
 {
     return($"{_joinClause} [{_entityJoin.GetNameInStore()}]");
 }