@@ -4,6 +4,7 @@ import ch.ergon.dope.QueryBuilder
44import ch.ergon.dope.couchbase.resolvable.expression.type.meta
55import ch.ergon.dope.couchbase.resolver.CouchbaseResolver
66import ch.ergon.dope.integrationTest.BaseIntegrationTest
7+ import ch.ergon.dope.integrationTest.TestCouchbaseDatabase.testAppOrderAuditBucket
78import ch.ergon.dope.integrationTest.TestCouchbaseDatabase.testBucket
89import ch.ergon.dope.integrationTest.toMapValues
910import ch.ergon.dope.integrationTest.tryUntil
@@ -27,9 +28,9 @@ class FromIntegrationTest : BaseIntegrationTest() {
2728 fun `join all orders on employee id` () {
2829 val employeeAlias = testBucket.alias(" e" )
2930 val orderAlias = testBucket.alias(" o" )
30- val employeeNameField = Field <StringType >(" name" , employeeAlias.alias )
31- val orderNumberField = Field <StringType >(" orderNumber" , orderAlias.alias )
32- val orderEmployeeIdField = Field <StringType >(" employee" , orderAlias.alias )
31+ val employeeNameField = Field <StringType >(" name" , employeeAlias)
32+ val orderNumberField = Field <StringType >(" orderNumber" , orderAlias)
33+ val orderEmployeeIdField = Field <StringType >(" employee" , orderAlias)
3334 val dopeQuery = QueryBuilder
3435 .select(
3536 employeeNameField,
@@ -58,16 +59,54 @@ class FromIntegrationTest : BaseIntegrationTest() {
5859 }
5960 }
6061
62+ @Test
63+ fun `join default orders with order_audit collection` () {
64+ val orderAlias = testBucket.withScopeAndCollection(" _default" , " _default" ).alias(" o" )
65+ val orderNumberField = Field <StringType >(" orderNumber" , orderAlias)
66+
67+ val auditAlias = testAppOrderAuditBucket.alias(" a" )
68+ val auditOrderRefField = Field <StringType >(" orderRef" , auditAlias)
69+ val auditStatusField = Field <StringType >(" status" , auditAlias)
70+
71+ val dopeQuery = QueryBuilder
72+ .select(
73+ orderNumberField,
74+ auditStatusField,
75+ )
76+ .from(orderAlias)
77+ .join(
78+ auditAlias,
79+ auditOrderRefField.isEqualTo(meta(orderAlias).id),
80+ )
81+ .orderBy(orderNumberField, ASC )
82+ .build(CouchbaseResolver ())
83+
84+ println (dopeQuery)
85+
86+ tryUntil {
87+ val queryResult = queryWithoutParameters(dopeQuery)
88+ println (queryResult.rows)
89+
90+ assertEquals(5 , queryResult.rows.size)
91+
92+ assertEquals(mapOf (" orderNumber" to " order1" , " status" to " CREATED" ), queryResult.toMapValues(rowNumber = 0 ))
93+ assertEquals(mapOf (" orderNumber" to " order2" , " status" to " CREATED" ), queryResult.toMapValues(rowNumber = 1 ))
94+ assertEquals(mapOf (" orderNumber" to " order3" , " status" to " CREATED" ), queryResult.toMapValues(rowNumber = 2 ))
95+ assertEquals(mapOf (" orderNumber" to " order4" , " status" to " CREATED" ), queryResult.toMapValues(rowNumber = 3 ))
96+ assertEquals(mapOf (" orderNumber" to " order5" , " status" to " CREATED" ), queryResult.toMapValues(rowNumber = 4 ))
97+ }
98+ }
99+
61100 @Test
62101 fun `join documents with multiple joins` () {
63102 val employeeAlias = testBucket.alias(" e" )
64103 val clientAlias = testBucket.alias(" c" )
65104 val orderAlias = testBucket.alias(" o" )
66- val employeeNameField = Field <StringType >(" name" , employeeAlias.alias )
67- val clientNameField = Field <StringType >(" name" , clientAlias.alias )
68- val orderNumberField = Field <StringType >(" orderNumber" , orderAlias.alias )
69- val orderEmployeeIdField = Field <StringType >(" employee" , orderAlias.alias )
70- val orderClientIdField = Field <StringType >(" client" , orderAlias.alias )
105+ val employeeNameField = Field <StringType >(" name" , employeeAlias)
106+ val clientNameField = Field <StringType >(" name" , clientAlias)
107+ val orderNumberField = Field <StringType >(" orderNumber" , orderAlias)
108+ val orderEmployeeIdField = Field <StringType >(" employee" , orderAlias)
109+ val orderClientIdField = Field <StringType >(" client" , orderAlias)
71110 val dopeQuery = QueryBuilder
72111 .select(
73112 orderNumberField,
@@ -122,21 +161,21 @@ class FromIntegrationTest : BaseIntegrationTest() {
122161 @Test
123162 fun `use multiple from terms` () {
124163 val e = testBucket.alias(" e" )
125- val eIdField = Field <NumberType >(" id" , e.alias )
126- val eTypeField = Field <StringType >(" type" , e.alias )
127- val eIsActiveField = Field <BooleanType >(" isActive" , e.alias )
164+ val eIdField = Field <NumberType >(" id" , e)
165+ val eTypeField = Field <StringType >(" type" , e)
166+ val eIsActiveField = Field <BooleanType >(" isActive" , e)
128167 val c = testBucket.alias(" c" )
129- val cIdField = Field <NumberType >(" id" , c.alias )
130- val cTypeField = Field <StringType >(" type" , c.alias )
131- val cIsActiveField = Field <BooleanType >(" isActive" , c.alias )
168+ val cIdField = Field <NumberType >(" id" , c)
169+ val cTypeField = Field <StringType >(" type" , c)
170+ val cIsActiveField = Field <BooleanType >(" isActive" , c)
132171 val o = testBucket.alias(" o" )
133- val oClientField = Field <StringType >(" client" , o.alias )
134- val oTypeField = Field <StringType >(" type" , o.alias )
135- val oOrderNumberField = Field <NumberType >(" orderNumber" , o.alias )
136- val oQuantitiesField = Field <ArrayType <NumberType >>(" quantities" , o.alias )
172+ val oClientField = Field <StringType >(" client" , o)
173+ val oTypeField = Field <StringType >(" type" , o)
174+ val oOrderNumberField = Field <NumberType >(" orderNumber" , o)
175+ val oQuantitiesField = Field <ArrayType <NumberType >>(" quantities" , o)
137176 val nestedOrders = testBucket.alias(" nestedOrders" )
138- val nestedOrdersEmployeeField = Field <StringType >(" employee" , nestedOrders.alias )
139- val nestedOrdersTypeField = Field <StringType >(" type" , nestedOrders.alias )
177+ val nestedOrdersEmployeeField = Field <StringType >(" employee" , nestedOrders)
178+ val nestedOrdersTypeField = Field <StringType >(" type" , nestedOrders)
140179
141180 val dopeQuery = QueryBuilder
142181 .selectDistinct(
0 commit comments