Skip to content

Commit d4dba77

Browse files
author
Julien Ruaux
committed
fix: Support projecting non-indexed fields
1 parent d266c13 commit d4dba77

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchSession.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static java.util.concurrent.TimeUnit.MINUTES;
1313

1414
import java.util.Collections;
15+
import java.util.HashSet;
1516
import java.util.List;
1617
import java.util.Optional;
1718
import java.util.Set;
@@ -29,6 +30,7 @@
2930
import com.redis.lettucemod.search.AggregateWithCursorResults;
3031
import com.redis.lettucemod.search.CreateOptions;
3132
import com.redis.lettucemod.search.CursorOptions;
33+
import com.redis.lettucemod.search.Document;
3234
import com.redis.lettucemod.search.Field;
3335
import com.redis.lettucemod.search.Group;
3436
import com.redis.lettucemod.search.IndexInfo;
@@ -163,13 +165,25 @@ private RediSearchTable loadTableSchema(SchemaTableName schemaTableName) {
163165
if (indexInfo.isEmpty()) {
164166
throw new TableNotFoundException(schemaTableName, format("Index '%s' not found", index), null);
165167
}
168+
Set<String> fields = new HashSet<>();
166169
ImmutableList.Builder<RediSearchColumnHandle> columnHandles = ImmutableList.builder();
167170
for (Field columnMetadata : indexInfo.get().getFields()) {
168-
columnHandles.add(buildColumnHandle(columnMetadata));
171+
RediSearchColumnHandle column = buildColumnHandle(columnMetadata);
172+
fields.add(column.getName());
173+
columnHandles.add(column);
169174
}
170-
RediSearchTableHandle tableHandle = new RediSearchTableHandle(RediSearchTableHandle.Type.SEARCH,
171-
schemaTableName);
172-
return new RediSearchTable(tableHandle, columnHandles.build());
175+
SearchResults<String, String> results = connection.sync().search(index, "*");
176+
for (Document<String, String> doc : results) {
177+
for (String field : doc.keySet()) {
178+
if (fields.contains(field)) {
179+
continue;
180+
}
181+
columnHandles.add(new RediSearchColumnHandle(field, VarcharType.VARCHAR, false));
182+
fields.add(field);
183+
}
184+
}
185+
return new RediSearchTable(new RediSearchTableHandle(RediSearchTableHandle.Type.SEARCH, schemaTableName),
186+
columnHandles.build());
173187
}
174188

175189
private Optional<IndexInfo> indexInfo(String index) {

subprojects/trino-redisearch/src/test/java/com/redis/trino/TestRediSearchConnectorSmokeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ protected QueryRunner createQueryRunner() throws Exception {
106106
@Test
107107
public void testNonIndexedFields() throws IOException {
108108
Beers.populateIndex(redisearch.getTestContext().getConnection());
109-
getQueryRunner().execute("select id, name from beers");
109+
getQueryRunner().execute("select id, last_mod from beers");
110110
}
111111

112112
@Test

0 commit comments

Comments
 (0)