Skip to content

Commit 25545d4

Browse files
committed
ESQL: Add url_encode function
- Remove url_encode from docs since it's a snapshot function - Declare it along other snapshot functions in EsqlFunctionRegistry - Annotate UrlEncode similarly to other snapshot functions - Add url_encode capability to csv tests
1 parent d4f42c1 commit 25545d4

File tree

8 files changed

+21
-12
lines changed

8 files changed

+21
-12
lines changed

docs/reference/query-languages/esql/_snippets/functions/layout/url_encode.md

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/lists/string-functions.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,3 @@
2525
* [`TO_LOWER`](../../functions-operators/string-functions.md#esql-to_lower)
2626
* [`TO_UPPER`](../../functions-operators/string-functions.md#esql-to_upper)
2727
* [`TRIM`](../../functions-operators/string-functions.md#esql-trim)
28-
* [`URL_ENCODE`](../../functions-operators/string-functions.md#esql-url_encode)

docs/reference/query-languages/esql/functions-operators/string-functions.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,3 @@ mapped_pages:
9393
:::{include} ../_snippets/functions/layout/trim.md
9494
:::
9595

96-
:::{include} ../_snippets/functions/layout/url_encode.md
97-
:::
98-

docs/reference/query-languages/esql/kibana/definition/functions/url_encode.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/qa/testFixtures/src/main/resources/string.csv-spec

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,6 +2481,8 @@ https%3A%2F%2Fwww.example.com%2Fpapers%3Fq%3Dinformation%2Bretrieval%26year%3D20
24812481
;
24822482

24832483
url_encode mixed functions tests
2484+
required_capability: url_encode
2485+
24842486
FROM employees
24852487
| WHERE emp_no == 10001
24862488
| EVAL a = TRIM(URL_ENCODE(first_name))
@@ -2492,6 +2494,8 @@ Georgi | georgi
24922494
;
24932495

24942496
url_encode mixed input tests
2497+
required_capability: url_encode
2498+
24952499
ROW u = ["hello elastic!", "a+b-c%d", "", "!#$&'()*+,/:;=?@[]"] | EVAL u = URL_ENCODE(u);
24962500

24972501
u:keyword

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/EsqlFunctionRegistry.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,7 @@ private static FunctionDefinition[][] functions() {
449449
def(ToString.class, ToString::new, "to_string", "to_str"),
450450
def(ToTimeDuration.class, ToTimeDuration::new, "to_timeduration"),
451451
def(ToUnsignedLong.class, ToUnsignedLong::new, "to_unsigned_long", "to_ulong", "to_ul"),
452-
def(ToVersion.class, ToVersion::new, "to_version", "to_ver"),
453-
def(UrlEncode.class, UrlEncode::new, "url_encode"), },
452+
def(ToVersion.class, ToVersion::new, "to_version", "to_ver"), },
454453
// multivalue functions
455454
new FunctionDefinition[] {
456455
def(MvAppend.class, MvAppend::new, "mv_append"),
@@ -515,7 +514,8 @@ private static FunctionDefinition[][] snapshotFunctions() {
515514
def(L1Norm.class, L1Norm::new, "v_l1_norm"),
516515
def(L2Norm.class, L2Norm::new, "v_l2_norm"),
517516
def(Magnitude.class, Magnitude::new, "v_magnitude"),
518-
def(Hamming.class, Hamming::new, "v_hamming") } };
517+
def(Hamming.class, Hamming::new, "v_hamming"),
518+
def(UrlEncode.class, UrlEncode::new, "url_encode") } };
519519
}
520520

521521
public EsqlFunctionRegistry snapshotRegistry() {

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/UrlEncode.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import org.elasticsearch.xpack.esql.core.tree.NodeInfo;
1818
import org.elasticsearch.xpack.esql.core.tree.Source;
1919
import org.elasticsearch.xpack.esql.expression.function.Example;
20+
import org.elasticsearch.xpack.esql.expression.function.FunctionAppliesTo;
21+
import org.elasticsearch.xpack.esql.expression.function.FunctionAppliesToLifecycle;
2022
import org.elasticsearch.xpack.esql.expression.function.FunctionInfo;
2123
import org.elasticsearch.xpack.esql.expression.function.Param;
2224
import org.elasticsearch.xpack.esql.expression.function.scalar.UnaryScalarFunction;
@@ -42,8 +44,10 @@ private UrlEncode(StreamInput in) throws IOException {
4244

4345
@FunctionInfo(
4446
returnType = "keyword",
47+
preview = true,
4548
description = "URL encodes the input.",
46-
examples = { @Example(file = "string", tag = "url_encode") }
49+
examples = { @Example(file = "string", tag = "url_encode") },
50+
appliesTo = { @FunctionAppliesTo(lifeCycle = FunctionAppliesToLifecycle.DEVELOPMENT) }
4751
)
4852
public UrlEncode(Source source, @Param(name = "string", type = { "keyword", "text" }, description = "URL to encode.") Expression str) {
4953
super(source, str);

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/UrlEncodeTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.nio.charset.StandardCharsets;
2424
import java.util.ArrayList;
2525
import java.util.List;
26+
import java.util.Locale;
2627
import java.util.function.Supplier;
2728

2829
import static org.hamcrest.Matchers.equalTo;
@@ -93,11 +94,11 @@ private static TestCaseSupplier.TestCase createTestCaseWithRandomString(
9394

9495
private static RandomUrl generateRandomUrl() {
9596
String protocol = randomFrom("http://", "https://", "");
96-
String domain = String.format("%s.com", randomAlphaOfLengthBetween(3, 10));
97+
String domain = String.format(Locale.ROOT, "%s.com", randomAlphaOfLengthBetween(3, 10));
9798
String path = randomFrom("", "/" + randomAlphanumericOfLength(5) + "/");
9899
String query = randomFrom("", "?" + randomAlphaOfLength(5) + "=" + randomAlphanumericOfLength(5));
99100

100-
String plain = String.format("%s%s%s%s", protocol, domain, path, query);
101+
String plain = String.format(Locale.ROOT, "%s%s%s%s", protocol, domain, path, query);
101102
String encoded = URLEncoder.encode(plain, StandardCharsets.UTF_8);
102103

103104
return new RandomUrl(plain, encoded);

0 commit comments

Comments
 (0)