Skip to content

Commit

Permalink
Incorrect handling of schema qualified tables in DbDataAdapter nreco#30
Browse files Browse the repository at this point in the history
  • Loading branch information
VitaliyMF committed Mar 3, 2017
1 parent a32ab51 commit 83e8b26
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 12 deletions.
25 changes: 19 additions & 6 deletions src/NReco.Data.Tests/DbDataAdapterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ @where[ WHERE {0}] @orderby[ ORDER BY {0}]"
public void Select() {
// count: table
Assert.Equal(5, DbAdapter.Select(new Query("contacts").Select(QField.Count) ).Single<int>() );
// count for schema-qualified query
Assert.Equal(5, DbAdapter.Select( new Query( new QTable( "main.contacts",null) ).Select(QField.Count) ).Single<int>() );

// count: data view
Assert.Equal(5, DbAdapter.Select(new Query("contacts_view").Select(QField.Count) ).Single<int>() );

Expand Down Expand Up @@ -132,27 +135,37 @@ public void InsertUpdateDelete_Dictionary() {
object recordId = null;
SqliteDb.OpenConnection( () => {
Assert.Equal(1,
DbAdapter.Insert("companies", new Dictionary<string,object>() {
DbAdapter.Insert("main.companies", new Dictionary<string,object>() {
{"title", "Test Inc"},
{"country", "Norway"},
{"logo_image", null}
}) );
recordId = DbAdapter.CommandBuilder.DbFactory.GetInsertId(DbAdapter.Connection);
} );
// update - schema qualified
Assert.Equal(1,
DbAdapter.Update( new Query( new QTable("main.companies", null), (QField)"id"==new QConst(recordId) ),
new Dictionary<string,object>() {
{"title", "Megacorp"}
}
) );
// update
Assert.Equal(1,
DbAdapter.Update( new Query("companies", (QField)"id"==new QConst(recordId) ),
new Dictionary<string,object>() {
{"title", "Megacorp Inc"}
}
) );
new Dictionary<string,object>() {
{"title", "Megacorp Inc"}
}
) );

var norwayCompanyQ = new Query("companies", (QField)"country"==(QConst)"Norway" );

Assert.Equal("Megacorp Inc", DbAdapter.Select(norwayCompanyQ).ToDictionary()["title"]);

// cleanup
Assert.Equal(1, DbAdapter.Delete( norwayCompanyQ ) );

// delete - schema qualified (affects 0 records)
Assert.Equal(0, DbAdapter.Delete( new Query( new QTable("main.companies",null), (QField)"country"==(QConst)"bla" ) ) );
}

[Fact]
Expand Down Expand Up @@ -207,7 +220,7 @@ public void InsertUpdateDelete_RecordSet() {
Assert.Equal(RecordSet.RowState.Unchanged, newCompany1Row.State);

newCompany2Row["title"] = "Awesome Corp";
Assert.Equal(1, DbAdapter.Update("companies", companyRS));
Assert.Equal(1, DbAdapter.Update("main.companies", companyRS));
Assert.Equal(RecordSet.RowState.Unchanged, newCompany2Row.State);

// cleanup
Expand Down
2 changes: 1 addition & 1 deletion src/NReco.Data.Tests/SqliteDbFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class SqliteDbFixture : IDisposable
public SqliteConnection DbConnection;
public DbFactory DbFactory;

string DbFileName;
public string DbFileName;

public SqliteDbFixture() {
DbFileName = Path.GetTempFileName()+".sqlite";
Expand Down
6 changes: 3 additions & 3 deletions src/NReco.Data/DbCommandBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ public virtual IDbCommand GetDeleteCommand(Query query) {

// prepare WHERE part
var whereExpression = dbSqlBuilder.BuildExpression( query.Condition );
var tblName = dbSqlBuilder.BuildTableName( query.Table.Name );
var tblName = dbSqlBuilder.BuildTableName( new QTable(query.Table.Name, null) );

var deleteTpl = new StringTemplate(DeleteTemplate);
SetCommandText(cmd, deleteTpl.FormatTemplate( (varName) => {
Expand Down Expand Up @@ -207,7 +207,7 @@ public virtual IDbCommand GetUpdateCommand(Query query, IEnumerable<KeyValuePair

// prepare WHERE part
string whereExpression = dbSqlBuilder.BuildExpression( query.Condition );
var tblName = dbSqlBuilder.BuildTableName( query.Table.Name );
var tblName = dbSqlBuilder.BuildTableName( new QTable(query.Table.Name, null) );

var updateTpl = new StringTemplate(UpdateTemplate);
SetCommandText(cmd, updateTpl.FormatTemplate( (varName) => {
Expand Down Expand Up @@ -245,7 +245,7 @@ public virtual IDbCommand GetInsertCommand(string tableName, IEnumerable<KeyValu
values.Append(dbSqlBuilder.BuildValue(setField.Value));
}

var tblName = dbSqlBuilder.BuildTableName( tableName );
var tblName = dbSqlBuilder.BuildTableName( new QTable(tableName, null) );
var colStr = columns.ToString();
var valStr = values.ToString();

Expand Down
2 changes: 1 addition & 1 deletion src/NReco.Data/DbDataAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ Query GetQueryByKey(object pocoModel) {
var schema = DataMapper.Instance.GetSchema(pocoModel.GetType());
if (schema.Key.Length==0)
throw new ArgumentException("Specified object doesn't have properties annotated with KeyAttribute.");
var q = new Query(schema.TableName);
var q = new Query( new QTable(schema.TableName, null) );
var andGroup = QGroupNode.And();
q.Condition = andGroup;
for (int i=0; i<schema.Key.Length; i++) {
Expand Down
2 changes: 1 addition & 1 deletion src/NReco.Data/Internal/RecordSetAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ IEnumerable<KeyValuePair<string,IQueryValue>> GetSetColumns() {
return setColumns.Select( c => new KeyValuePair<string,IQueryValue>(c.Name, new QVar(c.Name).Set(null) ) );
}
Query GetPkQuery() {
var q = new Query(TableName);
var q = new Query(new QTable(TableName, null));
var grpAnd = QGroupNode.And();
q.Condition = grpAnd;
foreach (var pkCol in RS.PrimaryKey) {
Expand Down

0 comments on commit 83e8b26

Please sign in to comment.