Ejemplo n.º 1
0
        void SetCommandParameters()
        {
            int entityFieldsCount = Entity.Resource.All.Count;

            TableAttributeNames = new string[entityFieldsCount];
            ParameterNames      = new Dictionary <EntityField, string>(entityFieldsCount);
            Parameters          = new Dictionary <EntityField, MySqlParameter>();

            for (int i = 0; i < entityFieldsCount; i++)
            {
                string      parameterName = string.Empty;
                EntityField field         = Entity.Resource.All[i];
                if (field.ManyToOne == null)
                {
                    string name = field.Names[Entity];
                    TableAttributeNames[i] = name;
                    parameterName          = "@" + name;
                    ParameterNames.Add(field, parameterName);
                }
                else
                {
                    Entity foreignEntity = field.ManyToOne.Entity;
                    string name          = field.Names[foreignEntity];
                    TableAttributeNames[i] = name;
                    parameterName          = "@" + name;
                    ParameterNames.Add(field, parameterName);
                }

                MySqlDbType type = MySqlTypeConverter.ConvertToMySqlTypeAsSqlDbType(Entity.Resource.All[i]);
                Parameters.Add(field, new MySqlParameter(parameterName, type));
            }

            FirstRowIndexParameter = new MySqlParameter("@firstRowIndex", MySqlDbType.Int32);
            RowNumberParameter     = new MySqlParameter("@rowNumber", MySqlDbType.Int32);
        }
Ejemplo n.º 2
0
        internal List <Dictionary <EntityField, object> > GetAttributesOfObjects(Entity entity, List <EntityField> fields, object[] values)
        {
            CurrentOperation = DatabaseOperation.SELECT;
            MySqlCommand command = GetMySqlCrudCommand(entity).GetSelectCommand(fields);

            command.Transaction = Transaction;

            for (int i = 0; i < values.Length; i++)
            {
                command.Parameters[i].Value = MySqlTypeConverter.Convert(fields[i], values[i]);
            }

            MySqlDataReader reader = null;

            try
            {
                reader = command.ExecuteReader();
            }
            catch (Exception exc)
            {
                reader.Close();
                Transaction.Rollback();
            }

            List <Dictionary <EntityField, object> > attributesOfObjects = new List <Dictionary <EntityField, object> >();

            while (reader.Read())
            {
                Dictionary <EntityField, object> objectFieldValueList = ReadRow(entity, reader);
                attributesOfObjects.Add(objectFieldValueList);
            }
            reader.Close();

            return(attributesOfObjects);
        }
Ejemplo n.º 3
0
        public void ShouldMapDisconnectedDataStructureToDbParameterAccessor()
        {
            DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(bigIntcolumnInfo, 0);

            Assert.That(accessor.ActualSqlType, Is.EqualTo(bigIntcolumnInfo.Datatype));
            Assert.That(accessor.DbFieldName, Is.EqualTo(bigIntcolumnInfo.ColumnName));
            Assert.That(accessor.Position, Is.EqualTo(0));
            Assert.That(accessor.DbParameter.Direction, Is.EqualTo(ParameterDirection.Input));
            Assert.That(accessor.DbParameter.Size, Is.EqualTo(bigIntcolumnInfo.Size));
        }
Ejemplo n.º 4
0
        internal Dictionary <EntityField, object> ReadRow(Entity entity, MySqlDataReader reader)
        {
            Dictionary <EntityField, object> fieldValues = new Dictionary <EntityField, object>();

            for (int i = 0; i < entity.Resource.All.Count; i++)
            {
                EntityField field = entity.Resource.All[i];
                object      value = reader.GetValue(i);
                fieldValues[field] = MySqlTypeConverter.Convert(field, value);
            }
            return(fieldValues);
        }
Ejemplo n.º 5
0
        public void ShouldMapDataReaderToColumnInfoWhenReaderHasNullValues()
        {
            IDataReader reader = Mock <IDataReader>();
            ColumnInfo  result = null;

            using (Record) {
                Expect.Call(reader.IsDBNull(0)).IgnoreArguments().Repeat.Times(3).Return(true);
            }
            using (Playback) {
                result = MySqlTypeConverter.GetColumnInfoFrom(reader);
            }

            Assert.That(result, Is.EqualTo(ColumnInfo.Empty));
        }
Ejemplo n.º 6
0
        void SetInsertCommand()
        {
            List <string> parameterNames = new List <string>();

            StringBuilder insertCommand =
                new StringBuilder(MySqlConnection.StringBuilderCapacity)
                .Append("INSERT INTO ")
                .AppendLine(Entity.Table.Name)
                .Append("(");

            foreach (string attributeName in TableAttributeNames)
            {
                insertCommand
                .Append(attributeName)
                .Append(",");
            }

            insertCommand = CutLastComma(insertCommand);
            insertCommand
            .AppendLine(")")
            .AppendLine("VALUES (");

            foreach (string attributeName in TableAttributeNames)
            {
                string parameter = "@" + attributeName;
                parameterNames.Add(parameter);
                insertCommand
                .Append(parameter)
                .Append(",");
            }

            insertCommand = CutLastComma(insertCommand);
            insertCommand
            .Append(")");

            Console.WriteLine(insertCommand);

            InsertCommand = new SqlCommand(insertCommand.ToString(), MySqlConnection.Connection);

            for (int i = 0; i < TableAttributeNames.Count; i++)
            {
                InsertCommand.Parameters.Add(parameterNames[i], MySqlTypeConverter.ConvertToMySqlTypeAsSqlDbType(Entity.Resource.All[i]));
            }

            InsertCommand.CommandType = CommandType.Text;
        }
Ejemplo n.º 7
0
        public void ShouldMapDataReaderToColumnInfo()
        {
            IDataReader reader         = Mock <IDataReader>();
            ColumnInfo  expectedColumn = new ColumnInfo("column_name", "varchar", 20);
            ColumnInfo  result         = null;

            using (Record) {
                Expect.Call(reader.GetString(0)).Return("column_name");
                Expect.Call(reader.GetString(1)).Return("varchar");
                Expect.Call(reader.GetInt32(2)).Return(20);
            }

            using (Playback) {
                result = MySqlTypeConverter.GetColumnInfoFrom(reader);
            }

            Assert.That(result, Is.EqualTo(expectedColumn));
        }
Ejemplo n.º 8
0
        internal override void Delete(Entity entity, List <EntityField> fields, object[] values)
        {
            CurrentOperation = DatabaseOperation.DELETE;
            MySqlCommand command = GetMySqlCrudCommand(entity).GetDeleteCommand(fields);

            command.Transaction = Transaction;

            for (int i = 0; i < values.Length; i++)
            {
                command.Parameters[i].Value = MySqlTypeConverter.Convert(fields[i], values[i]);
            }

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception exc)
            {
                Transaction.Rollback();
            }
        }
Ejemplo n.º 9
0
        public void ShouldMapSourceColumnToDbParameterAccessorForStringColumn()
        {
            DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(stringColumnInfo, 0);

            Assert.That(accessor.DbParameter.SourceColumn, Is.EqualTo(stringColumnInfo.ColumnName));
        }
Ejemplo n.º 10
0
        public void ShouldMapRunTimeTypeToDbParameterAccessorForStringColumn()
        {
            DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(stringColumnInfo, 0);

            Assert.That(accessor.DotNetType, Is.EqualTo(typeof(string)));
        }
Ejemplo n.º 11
0
        public void ShouldMapMySqlTypeToDbParameterAccessorForStringColumn()
        {
            DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(stringColumnInfo, 0);

            Assert.That(accessor.DbParameter.DbType, Is.EqualTo(DbType.String));
        }
Ejemplo n.º 12
0
        public void ShouldMapMySqlTypeToDbParameterAccessorForBigIntColumn()
        {
            DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(bigIntcolumnInfo, 0);

            Assert.That(accessor.DbParameter.DbType, Is.EqualTo(DbType.Int64));
        }
Ejemplo n.º 13
0
        void SetCreateCommand()
        {
            StringBuilder stringBuilder = new StringBuilder(MySqlConnection.StringBuilderCapacity);

            stringBuilder
            .Append("CREATE TABLE ")
            .Append(MySqlConnection.SchemaCreationPriority == SchemaCreationPriority.DatabaseFirst ? "IF NOT EXISTS " : "")
            .Append(Entity.Table.Name)
            .AppendLine("(");

            foreach (EntityField field in Entity.Resource.All)
            {
                stringBuilder
                .Append(field.Names[Entity])
                .Append(" ")
                .Append(MySqlTypeConverter.ConvertToMySqlTypeAsString(field))
                .Append((field.NotNull != null || field.PrimaryKey != null) ? " NOT NULL," : ",")
                .AppendLine();
            }

            stringBuilder
            .Append("PRIMARY KEY (");

            foreach (EntityField field in Entity.Resource.Primary)
            {
                stringBuilder
                .Append(field.Names[Entity])
                .Append(",");
            }

            stringBuilder = CutLastComma(stringBuilder);

            stringBuilder
            .Append("),")
            .AppendLine();

            foreach (Entity foreignEntity in Entity.Resource.Dictionary.Keys)
            {
                stringBuilder
                .Append("FOREIGN KEY (");

                foreach (EntityField foreignField in Entity.Resource.Dictionary[foreignEntity])
                {
                    stringBuilder
                    .Append(foreignField.Names[Entity])
                    .Append(",");
                }

                stringBuilder = CutLastComma(stringBuilder);
                stringBuilder
                .Append(") REFERENCES ")
                .Append(foreignEntity.Table.Name)
                .Append("(");

                foreach (EntityField foreignField in Entity.Resource.Dictionary[foreignEntity])
                {
                    stringBuilder
                    .Append(foreignField.Names[foreignEntity])
                    .Append(",");
                }

                stringBuilder = CutLastComma(stringBuilder);
                stringBuilder
                .Append("),")
                .AppendLine();
            }

            stringBuilder = CutLastComma(stringBuilder);

            stringBuilder.AppendLine(")");

            CreateCommand             = new SqlCommand(stringBuilder.ToString(), MySqlConnection.Connection);
            CreateCommand.CommandType = CommandType.Text;
        }
Ejemplo n.º 14
0
        void SetCreateCommand()
        {
            StringBuilder createCommandBuilder = new StringBuilder(MySqlDatabase.StringBuilderCapacity);

            createCommandBuilder
            .Append("CREATE TABLE ")
            .Append("IF NOT EXISTS ")
            .Append(Entity.Table.Name)
            .AppendLine("(");

            foreach (EntityField field in Entity.Resource.All)
            {
                createCommandBuilder
                .Append(field.Names[Entity])
                .Append(" ")
                .Append(MySqlTypeConverter.ConvertToMySqlTypeAsString(field))
                .Append((field.NotNull != null || field.PrimaryKey != null) ? " NOT NULL," : ",")
                .AppendLine();
            }

            createCommandBuilder
            .Append("PRIMARY KEY (");

            foreach (EntityField field in Entity.Resource.Primary)
            {
                createCommandBuilder
                .Append(field.Names[Entity])
                .Append(",");
            }

            createCommandBuilder = CutLast(createCommandBuilder, ",");

            createCommandBuilder
            .Append("),")
            .AppendLine();

            //foreach(Entity foreignEntity in Entity.Resource.ForeignEntityPrimaryFields.Keys)

            foreach (Entity foreignEntity in Entity.Resource.ForeignEntityPrimaryFields.Keys)
            {
                createCommandBuilder
                .Append("FOREIGN KEY (");

                foreach (EntityField foreignField in Entity.Resource.ForeignEntityPrimaryFields[foreignEntity])
                {
                    createCommandBuilder
                    .Append(foreignField.Names[Entity])
                    .Append(",");
                }

                createCommandBuilder = CutLast(createCommandBuilder, ",");
                createCommandBuilder
                .Append(") REFERENCES ")
                .Append(foreignEntity.Table.Name)
                .Append("(");

                foreach (EntityField foreignField in Entity.Resource.ForeignEntityPrimaryFields[foreignEntity])
                {
                    createCommandBuilder
                    .Append(foreignField.Names[foreignEntity])
                    .Append(",");
                }

                createCommandBuilder = CutLast(createCommandBuilder, ",");
                createCommandBuilder
                .Append("),")
                .AppendLine();
            }

            createCommandBuilder = CutLast(createCommandBuilder, ",");

            createCommandBuilder.AppendLine(")");

            CreateCommand             = new MySqlCommand(createCommandBuilder.ToString(), MySqlConnection.Connection);
            CreateCommand.CommandType = CommandType.Text;
        }