Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 0099b23

Browse files
committed
Add join testing of implicit join based on Aliased conventions
1 parent e1f62a1 commit 0099b23

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,6 @@ public override string GetQuotedTableName(string tableName)
713713
return Quote(NamingStrategy.GetTableName(tableName));
714714
}
715715

716-
717716
public override string GetQuotedColumnName(string fieldName)
718717
{
719718
return Quote(NamingStrategy.GetColumnName(fieldName));

tests/ServiceStack.OrmLite.Tests/LoadReferencesJoinTests.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,5 +292,75 @@ public void Can_do_LeftJoins_using_SqlExpression()
292292
Assert.That(dbAddresses.Count, Is.EqualTo(3));
293293
}
294294

295+
[Test]
296+
public void Can_Join_on_matching_Alias_convention()
297+
{
298+
db.DropAndCreateTable<AliasedCustomer>();
299+
db.DropAndCreateTable<AliasedCustomerAddress>();
300+
301+
var customers = new[]
302+
{
303+
new AliasedCustomer
304+
{
305+
Name = "Customer 1",
306+
PrimaryAddress = new AliasedCustomerAddress {
307+
AddressLine1 = "1 Australia Street",
308+
Country = "Australia"
309+
},
310+
},
311+
new AliasedCustomer
312+
{
313+
Name = "Customer 2",
314+
PrimaryAddress = new AliasedCustomerAddress {
315+
AddressLine1 = "2 America Street",
316+
Country = "USA"
317+
},
318+
},
319+
new AliasedCustomer
320+
{
321+
Name = "Customer 3",
322+
PrimaryAddress = new AliasedCustomerAddress {
323+
AddressLine1 = "3 Canada Street",
324+
Country = "Canada"
325+
},
326+
},
327+
};
328+
329+
customers.Each(c =>
330+
db.Save(c, references: true));
331+
332+
db.Insert(
333+
new Country { CountryName = "Australia", CountryCode = "AU" },
334+
new Country { CountryName = "USA", CountryCode = "US" },
335+
new Country { CountryName = "Italy", CountryCode = "IT" },
336+
new Country { CountryName = "Spain", CountryCode = "ED" });
337+
338+
//Normal Join
339+
var dbCustomers = db.Select<AliasedCustomer>(q => q
340+
.Join<AliasedCustomerAddress>()
341+
.Join<AliasedCustomerAddress, Country>((ca, c) => ca.Country == c.CountryName));
342+
343+
Assert.That(dbCustomers.Count, Is.EqualTo(2));
344+
345+
//Left Join
346+
dbCustomers = db.Select<AliasedCustomer>(q => q
347+
.Join<AliasedCustomerAddress>()
348+
.LeftJoin<AliasedCustomerAddress, Country>((ca, c) => ca.Country == c.CountryName));
349+
350+
Assert.That(dbCustomers.Count, Is.EqualTo(3));
351+
352+
//Warning: Right and Full Joins are not implemented by Sqlite3. Avoid if possible.
353+
var dbCountries = db.Select<Country>(q => q
354+
.LeftJoin<AliasedCustomerAddress>((c, ca) => ca.Country == c.CountryName)
355+
.LeftJoin<AliasedCustomerAddress, AliasedCustomer>());
356+
357+
Assert.That(dbCountries.Count, Is.EqualTo(4));
358+
359+
var dbAddresses = db.Select<AliasedCustomerAddress>(q => q
360+
.LeftJoin<Country>((ca, c) => ca.Country == c.CountryName)
361+
.LeftJoin<AliasedCustomerAddress, AliasedCustomer>());
362+
363+
Assert.That(dbAddresses.Count, Is.EqualTo(3));
364+
}
295365
}
296366
}

tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public class AliasedCustomerAddress
7878
[AutoIncrement]
7979
public int Id { get; set; }
8080
[Alias("Q_CustomerId")]
81-
public int AliasedCustomerId { get; set; }
81+
public int AliasedCustId { get; set; }
8282
public string AddressLine1 { get; set; }
8383
public string AddressLine2 { get; set; }
8484
public string City { get; set; }
@@ -239,10 +239,10 @@ public void Can_Save_and_Load_Aliased_References()
239239
db.Save(customer);
240240

241241
Assert.That(customer.Id, Is.GreaterThan(0));
242-
Assert.That(customer.PrimaryAddress.AliasedCustomerId, Is.EqualTo(0));
242+
Assert.That(customer.PrimaryAddress.AliasedCustId, Is.EqualTo(0));
243243

244244
db.SaveReferences(customer, customer.PrimaryAddress);
245-
Assert.That(customer.PrimaryAddress.AliasedCustomerId, Is.EqualTo(customer.Id));
245+
Assert.That(customer.PrimaryAddress.AliasedCustId, Is.EqualTo(customer.Id));
246246

247247
var dbCustomer = db.LoadSingleById<AliasedCustomer>(customer.Id);
248248

0 commit comments

Comments
 (0)