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); }
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); }
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)); }
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); }
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)); }
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; }
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)); }
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(); } }
public void ShouldMapSourceColumnToDbParameterAccessorForStringColumn() { DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(stringColumnInfo, 0); Assert.That(accessor.DbParameter.SourceColumn, Is.EqualTo(stringColumnInfo.ColumnName)); }
public void ShouldMapRunTimeTypeToDbParameterAccessorForStringColumn() { DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(stringColumnInfo, 0); Assert.That(accessor.DotNetType, Is.EqualTo(typeof(string))); }
public void ShouldMapMySqlTypeToDbParameterAccessorForStringColumn() { DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(stringColumnInfo, 0); Assert.That(accessor.DbParameter.DbType, Is.EqualTo(DbType.String)); }
public void ShouldMapMySqlTypeToDbParameterAccessorForBigIntColumn() { DbParameterAccessor accessor = MySqlTypeConverter.BuildDbParameterAccessorFrom(bigIntcolumnInfo, 0); Assert.That(accessor.DbParameter.DbType, Is.EqualTo(DbType.Int64)); }
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; }
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; }