Skip to content

Commit 39c3fd5

Browse files
committed
provides DSL to qualify tableName with project.dataset
1 parent c6fd90f commit 39c3fd5

2 files changed

Lines changed: 16 additions & 10 deletions

File tree

src/it/scala/scalikejdbc/bigquery/QueryDSLIntegration.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ class QueryDSLIntegration extends FlatSpec with BigQueryFixture {
4848

4949
val response = bq {
5050
select(sub.result.*, t.result.*).from(
51-
select(p.result.*).from(standardTableReference(dataset, Post.tableName, Some(p.tableAliasName)))
51+
select(p.result.*).from(Post in dataset as p)
5252
.where.in(p.id, Seq(PostId(1), PostId(2), PostId(3)))
5353
.limit(3)
5454
.offset(0)
5555
.as(sub)
5656
)
57-
.leftJoin(standardTableReference(dataset, Tag.tableName, Some(t.tableAliasName)))
57+
.leftJoin(Tag in dataset as t)
5858
.on(sub(p).id, t.postId)
5959
.orderBy(sub(p).id, t.id)
6060
}

src/main/scala/scalikejdbc/BqExtension.scala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@ import com.google.cloud.bigquery.DatasetId
44

55
object BqExtension {
66

7-
def standardTableReference(
8-
datasetId: DatasetId,
9-
tableName: String,
10-
tableAliasName: Option[String] = None): TableAsAliasSQLSyntax = {
7+
implicit class BqSQLSyntaxSupport[A](self: SQLSyntaxSupport[A]) {
118

12-
val tableReference = s"`${datasetId.getProject}.${datasetId.getDataset}.${tableName}`"
9+
class StandardTableAsAliasSQLSyntaxBuilder(datasetId: DatasetId) {
10+
def as(provider: SyntaxProvider[A]): TableAsAliasSQLSyntax = {
11+
val qualifiedTableName = s"`${datasetId.getProject}.${datasetId.getDataset}.${self.tableName}`"
1312

14-
val withAlias = tableAliasName.fold(tableReference) { alias =>
15-
s"${tableReference} ${alias}"
13+
// same implementation as SQLSyntaxSupport#as
14+
if (self.tableName == provider.tableAliasName) {
15+
TableAsAliasSQLSyntax(qualifiedTableName, self.table.rawParameters, Some(provider))
16+
} else {
17+
TableAsAliasSQLSyntax(qualifiedTableName + " " + provider.tableAliasName, Nil, Some(provider))
18+
}
19+
}
1620
}
1721

18-
TableAsAliasSQLSyntax(withAlias)
22+
def in(datasetId: DatasetId): StandardTableAsAliasSQLSyntaxBuilder = {
23+
new StandardTableAsAliasSQLSyntaxBuilder(datasetId)
24+
}
1925
}
2026
}

0 commit comments

Comments
 (0)