diff --git a/Postgrest/src/commonMain/kotlin/io/github/jan/supabase/postgrest/query/PostgrestQueryBuilder.kt b/Postgrest/src/commonMain/kotlin/io/github/jan/supabase/postgrest/query/PostgrestQueryBuilder.kt index c22e9070f..e9cafe684 100644 --- a/Postgrest/src/commonMain/kotlin/io/github/jan/supabase/postgrest/query/PostgrestQueryBuilder.kt +++ b/Postgrest/src/commonMain/kotlin/io/github/jan/supabase/postgrest/query/PostgrestQueryBuilder.kt @@ -72,7 +72,7 @@ class PostgrestQueryBuilder( this.body = body request() val columns = body.flatMap { it.jsonObject.keys }.distinct() - if(columns.isNotEmpty()) params["columns"] = listOf(columns.joinToString(",")) + if(columns.isNotEmpty()) params["columns"] = listOf(columns.joinToString(",") { "\"$it\"" }) } return RestRequestExecutor.execute(postgrest = postgrest, path = table, request = requestBuilder) } @@ -137,7 +137,7 @@ class PostgrestQueryBuilder( this.body = body request() val columns = body.flatMap { it.jsonObject.keys }.distinct() - if(columns.isNotEmpty()) params["columns"] = listOf(columns.joinToString(",")) + if(columns.isNotEmpty()) params["columns"] = listOf(columns.joinToString(",") { "\"$it\"" }) } return RestRequestExecutor.execute(postgrest = postgrest, path = table, request = requestBuilder) } diff --git a/Postgrest/src/commonTest/kotlin/PostgrestTest.kt b/Postgrest/src/commonTest/kotlin/PostgrestTest.kt index 774068c99..a9ef15f81 100644 --- a/Postgrest/src/commonTest/kotlin/PostgrestTest.kt +++ b/Postgrest/src/commonTest/kotlin/PostgrestTest.kt @@ -232,7 +232,7 @@ class PostgrestTest { assertMethodIs(HttpMethod.Post, it.method) val receivedBody = it.body.toJsonElement() assertEquals(expectedBody, receivedBody) - assertEquals("data", it.url.parameters["columns"]) + assertEquals("\"data\"", it.url.parameters["columns"]) assertEquals("schema", it.headers["Content-Profile"]) respond("") } @@ -254,13 +254,47 @@ class PostgrestTest { assertMethodIs(HttpMethod.Post, it.method) val receivedBody = it.body.toJsonElement() assertEquals(expectedBody, receivedBody) - assertEquals("data", it.url.parameters["columns"]) + assertEquals("\"data\"", it.url.parameters["columns"]) assertEquals("schema", it.headers["Content-Profile"]) respond("") } ) } + @Test + fun testInsertQuotesColumnNames() { + val body = JsonArray(listOf(buildJsonObject { + put("price (usd)", 1) + put("a.b", 2) + })) + testClient( + request = { table -> + from(table).insert(body) + }, + requestHandler = { + assertEquals("\"price (usd)\",\"a.b\"", it.url.parameters["columns"]) + respond("") + } + ) + } + + @Test + fun testUpsertQuotesColumnNames() { + val body = JsonArray(listOf(buildJsonObject { + put("price (usd)", 1) + put("a.b", 2) + })) + testClient( + request = { table -> + from(table).upsert(body) + }, + requestHandler = { + assertEquals("\"price (usd)\",\"a.b\"", it.url.parameters["columns"]) + respond("") + } + ) + } + @Test fun testUpdate() { val body = buildJsonObject {