Skip to content

Commit

Permalink
Escape table names in generated sql
Browse files Browse the repository at this point in the history
  • Loading branch information
oyvindberg committed Aug 9, 2024
1 parent 859b8b4 commit 4e753f4
Show file tree
Hide file tree
Showing 554 changed files with 5,154 additions and 5,154 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ import typo.dsl.UpdateBuilder

class PersonRepoImpl extends PersonRepo {
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilder("compositepk.person", PersonFields.structure)
DeleteBuilder(""""compositepk"."person"""", PersonFields.structure)
}
override def deleteById(compositeId: PersonId)(implicit c: Connection): Boolean = {
SQL"""delete from compositepk.person where "one" = ${ParameterValue(compositeId.one, null, ToStatement.longToStatement)} AND "two" = ${ParameterValue(compositeId.two, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))}""".executeUpdate() > 0
SQL"""delete from "compositepk"."person" where "one" = ${ParameterValue(compositeId.one, null, ToStatement.longToStatement)} AND "two" = ${ParameterValue(compositeId.two, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))}""".executeUpdate() > 0
}
override def insert(unsaved: PersonRow)(implicit c: Connection): PersonRow = {
SQL"""insert into compositepk.person("one", "two", "name")
SQL"""insert into "compositepk"."person"("one", "two", "name")
values (${ParameterValue(unsaved.one, null, ToStatement.longToStatement)}::int8, ${ParameterValue(unsaved.two, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))}, ${ParameterValue(unsaved.name, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))})
returning "one", "two", "name"
"""
Expand All @@ -54,12 +54,12 @@ class PersonRepoImpl extends PersonRepo {
).flatten
val quote = '"'.toString
if (namedParameters.isEmpty) {
SQL"""insert into compositepk.person default values
SQL"""insert into "compositepk"."person" default values
returning "one", "two", "name"
"""
.executeInsert(PersonRow.rowParser(1).single)
} else {
val q = s"""insert into compositepk.person(${namedParameters.map{case (x, _) => quote + x.name + quote}.mkString(", ")})
val q = s"""insert into "compositepk"."person"(${namedParameters.map{case (x, _) => quote + x.name + quote}.mkString(", ")})
values (${namedParameters.map{ case (np, cast) => s"{${np.name}}$cast"}.mkString(", ")})
returning "one", "two", "name"
"""
Expand All @@ -69,18 +69,18 @@ class PersonRepoImpl extends PersonRepo {

}
override def insertStreaming(unsaved: Iterator[PersonRow], batchSize: Int = 10000)(implicit c: Connection): Long = {
streamingInsert(s"""COPY compositepk.person("one", "two", "name") FROM STDIN""", batchSize, unsaved)(PersonRow.text, c)
streamingInsert(s"""COPY "compositepk"."person"("one", "two", "name") FROM STDIN""", batchSize, unsaved)(PersonRow.text, c)
}
/* NOTE: this functionality requires PostgreSQL 16 or later! */
override def insertUnsavedStreaming(unsaved: Iterator[PersonRowUnsaved], batchSize: Int = 10000)(implicit c: Connection): Long = {
streamingInsert(s"""COPY compositepk.person("name", "one", "two") FROM STDIN (DEFAULT '__DEFAULT_VALUE__')""", batchSize, unsaved)(PersonRowUnsaved.text, c)
streamingInsert(s"""COPY "compositepk"."person"("name", "one", "two") FROM STDIN (DEFAULT '__DEFAULT_VALUE__')""", batchSize, unsaved)(PersonRowUnsaved.text, c)
}
override def select: SelectBuilder[PersonFields, PersonRow] = {
SelectBuilderSql("compositepk.person", PersonFields.structure, PersonRow.rowParser)
SelectBuilderSql(""""compositepk"."person"""", PersonFields.structure, PersonRow.rowParser)
}
override def selectAll(implicit c: Connection): List[PersonRow] = {
SQL"""select "one", "two", "name"
from compositepk.person
from "compositepk"."person"
""".as(PersonRow.rowParser(1).*)
}
override def selectByFieldValues(fieldValues: List[PersonFieldOrIdValue[?]])(implicit c: Connection): List[PersonRow] = {
Expand All @@ -94,7 +94,7 @@ class PersonRepoImpl extends PersonRepo {
}
val quote = '"'.toString
val q = s"""select "one", "two", "name"
from compositepk.person
from "compositepk"."person"
where ${namedParameters.map(x => s"$quote${x.name}$quote = {${x.name}}").mkString(" AND ")}
"""
SimpleSql(SQL(q), namedParameters.map(_.tupled).toMap, RowParser.successful)
Expand All @@ -104,16 +104,16 @@ class PersonRepoImpl extends PersonRepo {
}
override def selectById(compositeId: PersonId)(implicit c: Connection): Option[PersonRow] = {
SQL"""select "one", "two", "name"
from compositepk.person
from "compositepk"."person"
where "one" = ${ParameterValue(compositeId.one, null, ToStatement.longToStatement)} AND "two" = ${ParameterValue(compositeId.two, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))}
""".as(PersonRow.rowParser(1).singleOpt)
}
override def update: UpdateBuilder[PersonFields, PersonRow] = {
UpdateBuilder("compositepk.person", PersonFields.structure, PersonRow.rowParser)
UpdateBuilder(""""compositepk"."person"""", PersonFields.structure, PersonRow.rowParser)
}
override def update(row: PersonRow)(implicit c: Connection): Boolean = {
val compositeId = row.compositeId
SQL"""update compositepk.person
SQL"""update "compositepk"."person"
set "name" = ${ParameterValue(row.name, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))}
where "one" = ${ParameterValue(compositeId.one, null, ToStatement.longToStatement)} AND "two" = ${ParameterValue(compositeId.two, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))}
""".executeUpdate() > 0
Expand All @@ -126,7 +126,7 @@ class PersonRepoImpl extends PersonRepo {
case PersonFieldValue.name(value) => NamedParameter("name", ParameterValue(value, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData)))
}
val quote = '"'.toString
val q = s"""update compositepk.person
val q = s"""update "compositepk"."person"
set ${namedParameters.map(x => s"$quote${x.name}$quote = {${x.name}}").mkString(", ")}
where "one" = {one} AND "two" = {two}
"""
Expand All @@ -136,7 +136,7 @@ class PersonRepoImpl extends PersonRepo {

}
override def upsert(unsaved: PersonRow)(implicit c: Connection): PersonRow = {
SQL"""insert into compositepk.person("one", "two", "name")
SQL"""insert into "compositepk"."person"("one", "two", "name")
values (
${ParameterValue(unsaved.one, null, ToStatement.longToStatement)}::int8,
${ParameterValue(unsaved.two, null, ToStatement.optionToStatement(ToStatement.stringToStatement, ParameterMetaData.StringParameterMetaData))},
Expand All @@ -161,7 +161,7 @@ class PersonRepoImpl extends PersonRepo {
case head :: rest =>
new anorm.testdb.hardcoded.ExecuteReturningSyntax.Ops(
BatchSql(
s"""insert into compositepk.person("one", "two", "name")
s"""insert into "compositepk"."person"("one", "two", "name")
values ({one}::int8, {two}, {name})
on conflict ("one", "two")
do update set
Expand All @@ -176,9 +176,9 @@ class PersonRepoImpl extends PersonRepo {
}
/* NOTE: this functionality is not safe if you use auto-commit mode! it runs 3 SQL statements */
override def upsertStreaming(unsaved: Iterator[PersonRow], batchSize: Int = 10000)(implicit c: Connection): Int = {
SQL"create temporary table person_TEMP (like compositepk.person) on commit drop".execute(): @nowarn
SQL"""create temporary table person_TEMP (like "compositepk"."person") on commit drop""".execute(): @nowarn
streamingInsert(s"""copy person_TEMP("one", "two", "name") from stdin""", batchSize, unsaved)(PersonRow.text, c): @nowarn
SQL"""insert into compositepk.person("one", "two", "name")
SQL"""insert into "compositepk"."person"("one", "two", "name")
select * from person_TEMP
on conflict ("one", "two")
do update set
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,35 +25,35 @@ import typo.dsl.UpdateBuilder

class FootballClubRepoImpl extends FootballClubRepo {
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilder("myschema.football_club", FootballClubFields.structure)
DeleteBuilder(""""myschema"."football_club"""", FootballClubFields.structure)
}
override def deleteById(id: FootballClubId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.football_club where "id" = ${ParameterValue(id, null, FootballClubId.toStatement)}""".executeUpdate() > 0
SQL"""delete from "myschema"."football_club" where "id" = ${ParameterValue(id, null, FootballClubId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.football_club
from "myschema"."football_club"
where "id" = ANY(${ids})
""".executeUpdate()

}
override def insert(unsaved: FootballClubRow)(implicit c: Connection): FootballClubRow = {
SQL"""insert into myschema.football_club("id", "name")
SQL"""insert into "myschema"."football_club"("id", "name")
values (${ParameterValue(unsaved.id, null, FootballClubId.toStatement)}::int8, ${ParameterValue(unsaved.name, null, ToStatement.stringToStatement)})
returning "id", "name"
"""
.executeInsert(FootballClubRow.rowParser(1).single)

}
override def insertStreaming(unsaved: Iterator[FootballClubRow], batchSize: Int = 10000)(implicit c: Connection): Long = {
streamingInsert(s"""COPY myschema.football_club("id", "name") FROM STDIN""", batchSize, unsaved)(FootballClubRow.text, c)
streamingInsert(s"""COPY "myschema"."football_club"("id", "name") FROM STDIN""", batchSize, unsaved)(FootballClubRow.text, c)
}
override def select: SelectBuilder[FootballClubFields, FootballClubRow] = {
SelectBuilderSql("myschema.football_club", FootballClubFields.structure, FootballClubRow.rowParser)
SelectBuilderSql(""""myschema"."football_club"""", FootballClubFields.structure, FootballClubRow.rowParser)
}
override def selectAll(implicit c: Connection): List[FootballClubRow] = {
SQL"""select "id", "name"
from myschema.football_club
from "myschema"."football_club"
""".as(FootballClubRow.rowParser(1).*)
}
override def selectByFieldValues(fieldValues: List[FootballClubFieldOrIdValue[?]])(implicit c: Connection): List[FootballClubRow] = {
Expand All @@ -66,7 +66,7 @@ class FootballClubRepoImpl extends FootballClubRepo {
}
val quote = '"'.toString
val q = s"""select "id", "name"
from myschema.football_club
from "myschema"."football_club"
where ${namedParameters.map(x => s"$quote${x.name}$quote = {${x.name}}").mkString(" AND ")}
"""
SimpleSql(SQL(q), namedParameters.map(_.tupled).toMap, RowParser.successful)
Expand All @@ -76,13 +76,13 @@ class FootballClubRepoImpl extends FootballClubRepo {
}
override def selectById(id: FootballClubId)(implicit c: Connection): Option[FootballClubRow] = {
SQL"""select "id", "name"
from myschema.football_club
from "myschema"."football_club"
where "id" = ${ParameterValue(id, null, FootballClubId.toStatement)}
""".as(FootballClubRow.rowParser(1).singleOpt)
}
override def selectByIds(ids: Array[FootballClubId])(implicit c: Connection): List[FootballClubRow] = {
SQL"""select "id", "name"
from myschema.football_club
from "myschema"."football_club"
where "id" = ANY(${ids})
""".as(FootballClubRow.rowParser(1).*)

Expand All @@ -92,11 +92,11 @@ class FootballClubRepoImpl extends FootballClubRepo {
ids.view.flatMap(id => byId.get(id).map(x => (id, x))).toMap
}
override def update: UpdateBuilder[FootballClubFields, FootballClubRow] = {
UpdateBuilder("myschema.football_club", FootballClubFields.structure, FootballClubRow.rowParser)
UpdateBuilder(""""myschema"."football_club"""", FootballClubFields.structure, FootballClubRow.rowParser)
}
override def update(row: FootballClubRow)(implicit c: Connection): Boolean = {
val id = row.id
SQL"""update myschema.football_club
SQL"""update "myschema"."football_club"
set "name" = ${ParameterValue(row.name, null, ToStatement.stringToStatement)}
where "id" = ${ParameterValue(id, null, FootballClubId.toStatement)}
""".executeUpdate() > 0
Expand All @@ -109,7 +109,7 @@ class FootballClubRepoImpl extends FootballClubRepo {
case FootballClubFieldValue.name(value) => NamedParameter("name", ParameterValue(value, null, ToStatement.stringToStatement))
}
val quote = '"'.toString
val q = s"""update myschema.football_club
val q = s"""update "myschema"."football_club"
set ${namedParameters.map(x => s"$quote${x.name}$quote = {${x.name}}").mkString(", ")}
where "id" = {id}
"""
Expand All @@ -119,7 +119,7 @@ class FootballClubRepoImpl extends FootballClubRepo {

}
override def upsert(unsaved: FootballClubRow)(implicit c: Connection): FootballClubRow = {
SQL"""insert into myschema.football_club("id", "name")
SQL"""insert into "myschema"."football_club"("id", "name")
values (
${ParameterValue(unsaved.id, null, FootballClubId.toStatement)}::int8,
${ParameterValue(unsaved.name, null, ToStatement.stringToStatement)}
Expand All @@ -142,7 +142,7 @@ class FootballClubRepoImpl extends FootballClubRepo {
case head :: rest =>
new anorm.testdb.hardcoded.ExecuteReturningSyntax.Ops(
BatchSql(
s"""insert into myschema.football_club("id", "name")
s"""insert into "myschema"."football_club"("id", "name")
values ({id}::int8, {name})
on conflict ("id")
do update set
Expand All @@ -157,9 +157,9 @@ class FootballClubRepoImpl extends FootballClubRepo {
}
/* NOTE: this functionality is not safe if you use auto-commit mode! it runs 3 SQL statements */
override def upsertStreaming(unsaved: Iterator[FootballClubRow], batchSize: Int = 10000)(implicit c: Connection): Int = {
SQL"create temporary table football_club_TEMP (like myschema.football_club) on commit drop".execute(): @nowarn
SQL"""create temporary table football_club_TEMP (like "myschema"."football_club") on commit drop""".execute(): @nowarn
streamingInsert(s"""copy football_club_TEMP("id", "name") from stdin""", batchSize, unsaved)(FootballClubRow.text, c): @nowarn
SQL"""insert into myschema.football_club("id", "name")
SQL"""insert into "myschema"."football_club"("id", "name")
select * from football_club_TEMP
on conflict ("id")
do update set
Expand Down
Loading

0 comments on commit 4e753f4

Please sign in to comment.