public object[][] Select(IDbConnection connection, Metadatas metadata, RowIdentifier row) { var rows = new List <object[]>(); var tableMetadata = metadata.GetTable(row); var nbParams = row.Columns.Count; var selectWriter = SqlWriter.GetSelectWriter() .AppendColumns(row, tableMetadata.ColumnsDefinition); using (var cmd = connection.CreateCommand()) { //Build query / params for (var i = 0; i < nbParams; i++) { var colName = row.Columns.ElementAt(i).Key; var paramName = SqlWriter.NamedParamPrefix + colName; var p = cmd.CreateParameter(); p.ParameterName = paramName; p.Value = row.Columns.ElementAt(i).Value; cmd.Parameters.Add(p); selectWriter.AppendToWhere(colName, paramName); } cmd.CommandText = selectWriter.ToStringBuilder().ToString(); //Exec query connection.Open(); using (var r = cmd.ExecuteReader()) { while (r.Read()) { var values = new object[r.FieldCount]; r.GetValues(values); rows.Add(values); } } connection.Close(); } return(rows.ToArray()); }
public static TableMetadata GetTable(this Metadatas metadatas, DerivativeTable dt) { return(metadatas.GetTable(dt.ServerId, dt.Database, dt.Schema, dt.Table)); }
public static TableMetadata GetTable(this Metadatas metadatas, ForeignKey fk) { return(metadatas.GetTable(fk.ServerIdTo, fk.DatabaseTo, fk.SchemaTo, fk.TableTo)); }
public static TableMetadata GetTable(this Metadatas metadatas, TableIdentifier dt) { return(metadatas.GetTable(dt.ServerId, dt.Database, dt.Schema, dt.Table)); }
internal void GemerateInsertStatment(Metadatas metadata, InsertStep step, IDbCommand cmd, StringBuilder sql, IDbTransaction transaction, ref int nbParams) { var tableMetadata = metadata.GetTable(step.DestinationTable); if (tableMetadata.ColumnsDefinition.Count != step.Datarow.Length) { throw new Exception("The step doesn't correspond to schema!"); } var insertWriter = SqlWriter.GetInsertWriter() .AppendColumns(step.DestinationTable, tableMetadata.ColumnsDefinition); var sbPostInsert = new StringBuilder(); //Valeurs des colonnes for (var i = 0; i < tableMetadata.ColumnsDefinition.Count; i++) { var col = tableMetadata.ColumnsDefinition[i]; var sqlVar = step.Datarow[i] as SqlVariable; //Variable à générer if (((col.IsPrimary && !col.IsAutoIncrement) || col.IsUniqueKey) && !col.IsForeignKey) { if (sqlVar == null) { throw new NullReferenceException(); } sqlVar.Value = DataBuilder.BuildDataColumn(this, transaction, step.DestinationTable.ServerId, step.DestinationTable.Database, step.DestinationTable.Schema, step.TableMetadata, col); insertWriter.AppendValue(sqlVar.Value); } //Post insert variable (auto generated primary key) else if (col.IsPrimary && col.IsAutoIncrement) { if (sqlVar == null) { throw new NullReferenceException(); } if (step.Depth == 0 || sqlVar.QueryValue) { sbPostInsert.Append(SqlWriter.SelectLastIdentity(sqlVar.Id, tableMetadata.Name, col.Name)); } } //Normal variables else { //On fait référence à une variable if (sqlVar != null) { //Si variable auto-généré if (sqlVar.Value == null) { insertWriter.AppendVariable(sqlVar.Id.ToString()); } //Sinon variable déjà générée else { insertWriter.AppendValue(sqlVar.Value); } } //C'est une valeur brute else { var sqlVarName = SqlWriter.NamedParamPrefix + tableMetadata.ColumnsDefinition[i].Name.FormatSqlParam() + step.StepId; var p = cmd.CreateParameter(); p.ParameterName = sqlVarName; if (col.IsDataColumnBuildable()) { p.Value = DataBuilder.BuildDataColumn(this, transaction, step.DestinationTable.ServerId, step.DestinationTable.Database, step.DestinationTable.Schema, step.TableMetadata, col); } else { p.Value = step.Datarow[i]; } p.DbType = col.DbType; cmd.Parameters.Add(p); insertWriter.Append(sqlVarName).Append(","); nbParams++; } } } insertWriter.Complete(); sql.Append(insertWriter.ToStringBuilder()) .Append(sbPostInsert); }