Skip to content

Commit 78e10d8

Browse files
committed
Make LOOKUP JOIN types table more compact
1 parent 138e489 commit 78e10d8

File tree

3 files changed

+60
-74
lines changed

3 files changed

+60
-74
lines changed

docs/reference/query-languages/esql/_snippets/commands/types/lookup-join.md

Lines changed: 15 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -2,76 +2,20 @@
22

33
**Supported types**
44

5-
| main | join |
5+
| field from the left index | field from the lookup index |
66
| --- | --- |
7-
| boolean | boolean |
8-
| byte | byte |
9-
| byte | double |
10-
| byte | float |
11-
| byte | half_float |
12-
| byte | integer |
13-
| byte | long |
14-
| byte | scaled_float |
15-
| byte | short |
16-
| date | date |
17-
| date_nanos | date_nanos |
18-
| double | byte |
19-
| double | double |
20-
| double | float |
21-
| double | half_float |
22-
| double | integer |
23-
| double | long |
24-
| double | scaled_float |
25-
| double | short |
26-
| float | byte |
27-
| float | double |
28-
| float | float |
29-
| float | half_float |
30-
| float | integer |
31-
| float | long |
32-
| float | scaled_float |
33-
| float | short |
34-
| half_float | byte |
35-
| half_float | double |
36-
| half_float | float |
37-
| half_float | half_float |
38-
| half_float | integer |
39-
| half_float | long |
40-
| half_float | scaled_float |
41-
| half_float | short |
42-
| integer | byte |
43-
| integer | double |
44-
| integer | float |
45-
| integer | half_float |
46-
| integer | integer |
47-
| integer | long |
48-
| integer | scaled_float |
49-
| integer | short |
50-
| ip | ip |
51-
| keyword | keyword |
52-
| long | byte |
53-
| long | double |
54-
| long | float |
55-
| long | half_float |
56-
| long | integer |
57-
| long | long |
58-
| long | scaled_float |
59-
| long | short |
60-
| scaled_float | byte |
61-
| scaled_float | double |
62-
| scaled_float | float |
63-
| scaled_float | half_float |
64-
| scaled_float | integer |
65-
| scaled_float | long |
66-
| scaled_float | scaled_float |
67-
| scaled_float | short |
68-
| short | byte |
69-
| short | double |
70-
| short | float |
71-
| short | half_float |
72-
| short | integer |
73-
| short | long |
74-
| short | scaled_float |
75-
| short | short |
76-
| text | keyword |
7+
| boolean | boolean |
8+
| byte | half_float, float, double, scaled_float, byte, short, integer, long |
9+
| date | date |
10+
| date_nanos | date_nanos |
11+
| double | half_float, float, double, scaled_float, byte, short, integer, long |
12+
| float | half_float, float, double, scaled_float, byte, short, integer, long |
13+
| half_float | half_float, float, double, scaled_float, byte, short, integer, long |
14+
| integer | half_float, float, double, scaled_float, byte, short, integer, long |
15+
| ip | ip |
16+
| keyword | keyword |
17+
| long | half_float, float, double, scaled_float, byte, short, integer, long |
18+
| scaled_float | half_float, float, double, scaled_float, byte, short, integer, long |
19+
| short | half_float, float, double, scaled_float, byte, short, integer, long |
20+
| text | keyword |
7721

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/action/LookupJoinTypesIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,8 +768,8 @@ private boolean isValidDataType(DataType dataType) {
768768

769769
private static void saveJoinTypes(Supplier<Map<List<DataType>, DataType>> signatures) throws Exception {
770770
ArrayList<EsqlFunctionRegistry.ArgSignature> args = new ArrayList<>();
771-
args.add(new EsqlFunctionRegistry.ArgSignature("main", null, "Field from the main index", false, false));
772-
args.add(new EsqlFunctionRegistry.ArgSignature("join", null, "Field from the join index", false, false));
771+
args.add(new EsqlFunctionRegistry.ArgSignature("field from the left index", null, null, false, false));
772+
args.add(new EsqlFunctionRegistry.ArgSignature("field from the lookup index", null, null, false, false));
773773
DocsV3Support.CommandsDocsSupport docs = new DocsV3Support.CommandsDocsSupport(
774774
"lookup-join",
775775
LookupJoinTypesIT.class,

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/DocsV3Support.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import java.util.Map;
6565
import java.util.Objects;
6666
import java.util.Optional;
67+
import java.util.TreeMap;
6768
import java.util.function.Function;
6869
import java.util.function.Supplier;
6970
import java.util.regex.Matcher;
@@ -311,7 +312,7 @@ public License.OperationMode invoke(List<DataType> fieldTypes) throws Exception
311312
protected final String name;
312313
protected final FunctionDefinition definition;
313314
protected final Logger logger;
314-
private final Supplier<Map<List<DataType>, DataType>> signatures;
315+
protected final Supplier<Map<List<DataType>, DataType>> signatures;
315316
private TempFileWriter tempFileWriter;
316317
private final LicenseRequirementChecker licenseChecker;
317318

@@ -930,6 +931,47 @@ void renderKibanaCommandDefinition() throws Exception {
930931
writeToTempKibanaDir("definition", "json", rendered);
931932
}
932933
}
934+
935+
@Override
936+
void renderTypes(String name, List<EsqlFunctionRegistry.ArgSignature> args) throws IOException {
937+
assert args.size() == 2;
938+
StringBuilder header = new StringBuilder("| ");
939+
StringBuilder separator = new StringBuilder("| ");
940+
List<String> argNames = args.stream().map(EsqlFunctionRegistry.ArgSignature::name).toList();
941+
for (String arg : argNames) {
942+
header.append(arg).append(" | ");
943+
separator.append("---").append(" | ");
944+
}
945+
946+
Map<String, List<String>> compactedTable = new TreeMap<>();
947+
for (Map.Entry<List<DataType>, DataType> sig : this.signatures.get().entrySet()) {
948+
if (shouldHideSignature(sig.getKey(), sig.getValue())) {
949+
continue;
950+
}
951+
String mainType = sig.getKey().getFirst().esNameIfPossible();
952+
String secondaryType = sig.getKey().get(1).esNameIfPossible();
953+
List<String> secondaryTypes = compactedTable.computeIfAbsent(mainType, (k) -> new ArrayList<>());
954+
secondaryTypes.add(secondaryType);
955+
}
956+
957+
List<String> table = new ArrayList<>();
958+
for (Map.Entry<String, List<String>> sig : compactedTable.entrySet()) {
959+
String row = "| " + sig.getKey() + " | " + String.join(", ", sig.getValue()) + " |";
960+
table.add(row);
961+
}
962+
Collections.sort(table);
963+
if (table.isEmpty()) {
964+
logger.info("Warning: No table of types generated for [{}]", name);
965+
return;
966+
}
967+
968+
String rendered = DOCS_WARNING + """
969+
**Supported types**
970+
971+
""" + header + "\n" + separator + "\n" + String.join("\n", table) + "\n\n";
972+
logger.info("Writing function types for [{}]:\n{}", name, rendered);
973+
writeToTempSnippetsDir("types", rendered);
974+
}
933975
}
934976

935977
protected String buildFunctionSignatureSvg() throws IOException {

0 commit comments

Comments
 (0)