Skip to content

Commit 7493bc8

Browse files
committed
chore(npm): update dependencies
1 parent ea06422 commit 7493bc8

File tree

8 files changed

+106
-51
lines changed

8 files changed

+106
-51
lines changed

docker-compose.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ version: "3"
22

33
services:
44
mysql:
5-
container_name: athenna_mysql
5+
container_name: athenna_db_mysql
66
image: mysql
77
ports:
8-
- "3307:3306"
8+
- "3308:3306"
99
environment:
1010
MYSQL_DATABASE: athenna
1111
MYSQL_ROOT_PASSWORD: 12345
1212
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
1313

1414
postgres:
15-
container_name: athenna_postgres
15+
container_name: athenna_db_postgres
1616
image: postgres
1717
ports:
18-
- "5433:5432"
18+
- "5434:5432"
1919
environment:
2020
POSTGRES_DB: postgres
2121
POSTGRES_USER: postgres

src/database/builders/QueryBuilder.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,18 @@ export class QueryBuilder<
2626
*/
2727
protected driver: Driver
2828

29+
/**
30+
* The initial table that the query is going to work with.
31+
*/
32+
protected tableName: string
33+
2934
/**
3035
* Creates a new instance of QueryBuilder.
3136
*/
3237
public constructor(driver: Driver, tableName: string) {
3338
super()
3439
this.driver = driver
40+
this.tableName = tableName
3541
this.driver.table(tableName)
3642
}
3743

@@ -53,7 +59,24 @@ export class QueryBuilder<
5359
* Set the query builder of driver.
5460
*/
5561
public setQueryBuilder(queryBuilder: any) {
56-
this.driver.setQueryBuilder(queryBuilder)
62+
this.driver.setQueryBuilder(queryBuilder, { useSetQB: true })
63+
64+
return this
65+
}
66+
67+
/**
68+
* Return the driver of the query builder.
69+
*/
70+
public getDriver() {
71+
return this.driver
72+
}
73+
74+
/**
75+
* Set the driver of the query builder.
76+
*/
77+
public setDriver(driver: any, tableName?: string) {
78+
this.driver = driver
79+
this.driver.table(tableName || this.tableName)
5780

5881
return this
5982
}

src/database/drivers/Driver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ export abstract class Driver<Client = any, QB = any> {
143143
})
144144

145145
this.qb = queryBuilder
146-
this.useSetQB = options.useSetQB
146+
this.useSetQB = !this.qb ? false : options.useSetQB
147147

148148
return this
149149
}

src/models/relations/BelongsTo/BelongsToRelation.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,23 +83,27 @@ export class BelongsToRelation {
8383
query: Driver,
8484
relation: BelongsToOptions
8585
) {
86+
const schema = Model.schema()
8687
const RelationModel = relation.model()
8788

88-
const primaryKey = Model.schema().getMainPrimaryKeyName()
89+
const primaryKey = schema.getMainPrimaryKeyName()
8990
const foreignKey =
90-
Model.schema().getColumnNameByProperty(relation.foreignKey) ||
91-
Model.schema().getColumnNameByProperty(
91+
schema.getColumnNameByProperty(relation.foreignKey) ||
92+
schema.getColumnNameByProperty(
9293
`${String.toCamelCase(RelationModel.name)}Id`
9394
)
9495

95-
query.table(RelationModel.table())
96+
let whereRaw = `${Model.table()}.${foreignKey} = ${RelationModel.table()}.${primaryKey}`
97+
98+
switch (RelationModel.schema().getModelDriverName()) {
99+
case 'sqlite':
100+
case 'postgres':
101+
whereRaw = `"${Model.table()}"."${foreignKey}" = "${RelationModel.table()}"."${primaryKey}"`
102+
}
96103

97104
RelationModel.query()
98-
.setQueryBuilder(query)
99-
.select()
100-
.whereRaw(
101-
`${Model.table()}.${foreignKey} = ${RelationModel.table()}.${primaryKey}`
102-
)
105+
.setDriver(query, RelationModel.table())
106+
.whereRaw(whereRaw)
103107
.when(relation.closure, relation.closure)
104108
}
105109
}

src/models/relations/BelongsToMany/BelongsToManyRelation.ts

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -118,31 +118,51 @@ export class BelongsToManyRelation {
118118
relation: BelongsToManyOptions
119119
) {
120120
const PivotModel = relation.pivotModel()
121-
const RelatedModel = relation.model()
121+
const RelationModel = relation.model()
122122

123123
const modelTable = Model.table()
124124
const pivotTable = PivotModel.table()
125-
const relatedTable = RelatedModel.table()
125+
const relatedTable = RelationModel.table()
126126

127127
const modelPK = Model.schema().getMainPrimaryKeyName()
128-
const relatedPK = RelatedModel.schema().getMainPrimaryKeyName()
129-
130-
const pivotFK = PivotModel.schema().getColumnNameByProperty(
131-
relation.foreignKey
132-
)
133-
const pivotRK = PivotModel.schema().getColumnNameByProperty(
134-
relation.relationForeignKey
135-
)
136-
137-
query.table(pivotTable)
128+
const relatedPK = RelationModel.schema().getMainPrimaryKeyName()
129+
130+
const pivotFK =
131+
PivotModel.schema().getColumnNameByProperty(relation.foreignKey) ||
132+
PivotModel.schema().getColumnNameByProperty(
133+
`${String.toCamelCase(Model.name)}Id`
134+
)
135+
const pivotRK =
136+
PivotModel.schema().getColumnNameByProperty(
137+
relation.relationForeignKey
138+
) ||
139+
PivotModel.schema().getColumnNameByProperty(
140+
`${String.toCamelCase(RelationModel.name)}Id`
141+
)
142+
143+
let whereRaw = `${pivotTable}.${pivotFK} = ${modelTable}.${modelPK}`
144+
145+
switch (PivotModel.schema().getModelDriverName()) {
146+
case 'sqlite':
147+
case 'postgres':
148+
whereRaw = `"${pivotTable}"."${pivotFK}" = "${modelTable}"."${modelPK}"`
149+
}
138150

139151
PivotModel.query()
140-
.setQueryBuilder(query)
141-
.whereRaw(`${pivotTable}.${pivotFK} = ${modelTable}.${modelPK}`)
152+
.setDriver(query, pivotTable)
153+
.whereRaw(whereRaw)
142154
.whereExists(innerQuery => {
143-
RelatedModel.query()
144-
.setQueryBuilder(innerQuery)
145-
.whereRaw(`${relatedTable}.${relatedPK} = ${pivotTable}.${pivotRK}`)
155+
let whereRaw = `${relatedTable}.${relatedPK} = ${pivotTable}.${pivotRK}`
156+
157+
switch (RelationModel.schema().getModelDriverName()) {
158+
case 'sqlite':
159+
case 'postgres':
160+
whereRaw = `"${relatedTable}"."${relatedPK}" = "${pivotTable}"."${pivotRK}"`
161+
}
162+
163+
RelationModel.query()
164+
.setDriver(innerQuery, relatedTable)
165+
.whereRaw(whereRaw)
146166
.when(relation.closure, relation.closure)
147167
})
148168
}

src/models/relations/HasMany/HasManyRelation.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,27 @@ export class HasManyRelation {
7171
query: Driver,
7272
relation: HasManyOptions
7373
) {
74+
const schema = Model.schema()
7475
const RelationModel = relation.model()
7576

76-
const primaryKey = Model.schema().getMainPrimaryKeyName()
77+
const primaryKey = schema.getMainPrimaryKeyName()
7778
const foreignKey =
78-
Model.schema().getColumnNameByProperty(relation.foreignKey) ||
79-
Model.schema().getColumnNameByProperty(
79+
schema.getColumnNameByProperty(relation.foreignKey) ||
80+
schema.getColumnNameByProperty(
8081
`${String.toCamelCase(RelationModel.name)}Id`
8182
)
8283

83-
query.table(RelationModel.table())
84+
let whereRaw = `${RelationModel.table()}.${foreignKey} = ${Model.table()}.${primaryKey}`
85+
86+
switch (RelationModel.schema().getModelDriverName()) {
87+
case 'sqlite':
88+
case 'postgres':
89+
whereRaw = `"${RelationModel.table()}"."${foreignKey}" = "${Model.table()}"."${primaryKey}"`
90+
}
8491

8592
RelationModel.query()
86-
.setQueryBuilder(query)
87-
.select()
88-
.whereRaw(
89-
`${RelationModel.table()}.${foreignKey} = ${Model.table()}.${primaryKey}`
90-
)
93+
.setDriver(query, RelationModel.table())
94+
.whereRaw(whereRaw)
9195
.when(relation.closure, relation.closure)
9296
}
9397
}

src/models/relations/HasOne/HasOneRelation.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,23 +65,27 @@ export class HasOneRelation {
6565
query: Driver,
6666
relation: HasOneOptions
6767
) {
68+
const schema = Model.schema()
6869
const RelationModel = relation.model()
6970

70-
const primaryKey = Model.schema().getMainPrimaryKeyName()
71+
const primaryKey = schema.getMainPrimaryKeyName()
7172
const foreignKey =
72-
Model.schema().getColumnNameByProperty(relation.foreignKey) ||
73-
Model.schema().getColumnNameByProperty(
73+
schema.getColumnNameByProperty(relation.foreignKey) ||
74+
schema.getColumnNameByProperty(
7475
`${String.toCamelCase(RelationModel.name)}Id`
7576
)
7677

77-
query.table(RelationModel.table())
78+
let whereRaw = `${RelationModel.table()}.${foreignKey} = ${Model.table()}.${primaryKey}`
79+
80+
switch (RelationModel.schema().getModelDriverName()) {
81+
case 'sqlite':
82+
case 'postgres':
83+
whereRaw = `"${RelationModel.table()}"."${foreignKey}" = "${Model.table()}"."${primaryKey}"`
84+
}
7885

7986
RelationModel.query()
80-
.setQueryBuilder(query)
81-
.select()
82-
.whereRaw(
83-
`${RelationModel.table()}.${foreignKey} = ${Model.table()}.${primaryKey}`
84-
)
87+
.setDriver(query, RelationModel.table())
88+
.whereRaw(whereRaw)
8589
.when(relation.closure, relation.closure)
8690
}
8791
}

tests/fixtures/config/database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default {
5656
driver: 'postgres',
5757
connection: {
5858
host: 'localhost',
59-
port: 5433,
59+
port: 5434,
6060
user: 'postgres',
6161
password: '12345',
6262
database: 'postgres'

0 commit comments

Comments
 (0)