|
12 | 12 | import static java.util.concurrent.TimeUnit.MINUTES;
|
13 | 13 |
|
14 | 14 | import java.util.Collections;
|
| 15 | +import java.util.HashSet; |
15 | 16 | import java.util.List;
|
16 | 17 | import java.util.Optional;
|
17 | 18 | import java.util.Set;
|
|
29 | 30 | import com.redis.lettucemod.search.AggregateWithCursorResults;
|
30 | 31 | import com.redis.lettucemod.search.CreateOptions;
|
31 | 32 | import com.redis.lettucemod.search.CursorOptions;
|
| 33 | +import com.redis.lettucemod.search.Document; |
32 | 34 | import com.redis.lettucemod.search.Field;
|
33 | 35 | import com.redis.lettucemod.search.Group;
|
34 | 36 | import com.redis.lettucemod.search.IndexInfo;
|
@@ -163,13 +165,25 @@ private RediSearchTable loadTableSchema(SchemaTableName schemaTableName) {
|
163 | 165 | if (indexInfo.isEmpty()) {
|
164 | 166 | throw new TableNotFoundException(schemaTableName, format("Index '%s' not found", index), null);
|
165 | 167 | }
|
| 168 | + Set<String> fields = new HashSet<>(); |
166 | 169 | ImmutableList.Builder<RediSearchColumnHandle> columnHandles = ImmutableList.builder();
|
167 | 170 | 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); |
169 | 174 | }
|
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()); |
173 | 187 | }
|
174 | 188 |
|
175 | 189 | private Optional<IndexInfo> indexInfo(String index) {
|
|
0 commit comments