SabrinaZhaozyf commented on code in PR #9114: URL: https://github.com/apache/pinot/pull/9114#discussion_r935887223
########## pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java: ########## @@ -600,6 +599,173 @@ public void testUrlFunc() assertEquals(decodedString, expectedUrlStr); } + @Test + public void testBase64Func() + throws Exception { + + // string literal + String sqlQuery = "SELECT toBase64(toUtf8('hello!')), " + "fromUtf8(fromBase64('aGVsbG8h')) FROM myTable"; + JsonNode response = postQuery(sqlQuery, _brokerBaseApiUrl); + JsonNode resultTable = response.get("resultTable"); + JsonNode dataSchema = resultTable.get("dataSchema"); + assertEquals(dataSchema.get("columnDataTypes").toString(), "[\"STRING\",\"STRING\"]"); + JsonNode rows = response.get("resultTable").get("rows"); + + String encodedString = rows.get(0).get(0).asText(); + String expectedEncodedStr = toBase64(toUtf8("hello!")); + assertEquals(encodedString, expectedEncodedStr); + String decodedString = rows.get(0).get(1).asText(); + String expectedDecodedStr = fromUtf8(fromBase64("aGVsbG8h")); + assertEquals(decodedString, expectedDecodedStr); + + // long string literal encode + sqlQuery = + "SELECT toBase64(toUtf8('this is a long string that will encode to more than 76 characters using base64')) " + + "FROM " + + "myTable"; + response = postQuery(sqlQuery, _brokerBaseApiUrl); + resultTable = response.get("resultTable"); + rows = resultTable.get("rows"); + encodedString = rows.get(0).get(0).asText(); + assertEquals(encodedString, + toBase64(toUtf8("this is a long string that will encode to more than 76 characters using base64"))); + + // long string literal decode + sqlQuery = "SELECT fromUtf8(fromBase64" + + "('dGhpcyBpcyBhIGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBlbmNvZGUgdG8gbW9yZSB0aGFuIDc2IGNoYXJhY3RlcnMgdXNpbmcgYmFzZTY0" + + "')) FROM myTable"; + response = postQuery(sqlQuery, _brokerBaseApiUrl); + resultTable = response.get("resultTable"); + rows = resultTable.get("rows"); + decodedString = rows.get(0).get(0).asText(); + assertEquals(decodedString, fromUtf8(fromBase64( + "dGhpcyBpcyBhIGxvbmcgc3RyaW5nIHRoYXQgd2lsbCBlbmNvZGUgdG8gbW9yZSB0aGFuIDc2IGNoYXJhY3RlcnMgdXNpbmcgYmFzZTY0"))); + + // non-string literal + sqlQuery = "SELECT toBase64(toUtf8(123)), fromUtf8(fromBase64(toBase64(toUtf8(123)))), 123 FROM myTable"; + response = postQuery(sqlQuery, _brokerBaseApiUrl); + resultTable = response.get("resultTable"); + rows = resultTable.get("rows"); + encodedString = rows.get(0).get(0).asText(); + decodedString = rows.get(0).get(1).asText(); + String originalCol = rows.get(0).get(2).asText(); + assertEquals(decodedString, originalCol); + assertEquals(encodedString, toBase64(toUtf8("123"))); + + // identifier + sqlQuery = + "SELECT Carrier, toBase64(toUtf8(Carrier)), fromUtf8(fromBase64(toBase64(toUtf8(Carrier)))), fromBase64" + + "(toBase64(toUtf8(Carrier))) FROM myTable LIMIT 100"; + response = postQuery(sqlQuery, _brokerBaseApiUrl); + resultTable = response.get("resultTable"); + dataSchema = resultTable.get("dataSchema"); + assertEquals(dataSchema.get("columnDataTypes").toString(), "[\"STRING\",\"STRING\",\"STRING\",\"BYTES\"]"); + rows = response.get("resultTable").get("rows"); + assertEquals(rows.size(), 100); + for (int i = 0; i < 100; i++) { + String original = rows.get(0).asText(); + String encoded = rows.get(1).asText(); + String decoded = rows.get(2).asText(); + assertEquals(original, decoded); + assertEquals(encoded, toBase64(toUtf8(original))); + assertEquals(decoded, fromUtf8(fromBase64(toBase64(toUtf8(original))))); + } + + // invalid argument Review Comment: Will add in documentation that BYTES col will be represented as HEX string (also link: https://docs.pinot.apache.org/users/user-guide-query/querying-pinot#bytes-column) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org