Skip to content

Commit 51be8d6

Browse files
committed
Refactored schema factory
1 parent 56857d1 commit 51be8d6

File tree

13 files changed

+496
-453
lines changed

13 files changed

+496
-453
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@ out/
3535

3636
### VS Code ###
3737
.vscode/
38+
.DS_Store

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,8 @@ subprojects {
7676
enabled = true
7777
archiveClassifier = ''
7878
}
79+
80+
sourceCompatibility = 8
81+
targetCompatibility = 8
82+
7983
}

gradle.properties

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
group=com.redis
2-
sourceCompatibility=1.8
3-
targetCompatibility=1.8
42

5-
bootPluginVersion=2.5.4
3+
bootPluginVersion=2.6.1
64
dependencyPluginVersion=1.0.11.RELEASE
75
kordampBuildVersion=2.6.0
86
kordampPluginVersion=0.47.0
9-
lombokPluginVersion=6.2.0
107

11-
lettucemodVersion=1.7.3
12-
testcontainersVersion=1.15.3
13-
testcontainersRedisVersion=1.3.3
14-
calciteVersion=1.21.0
8+
lettucemodVersion=1.8.1
9+
testcontainersRedisVersion=1.4.6
10+
calciteVersion=1.21.0
11+
jredisearchVersion=2.2.0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

settings.gradle

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ buildscript {
99
classpath "org.kordamp.gradle:kordamp-parentbuild:$kordampBuildVersion"
1010
classpath "org.springframework.boot:spring-boot-gradle-plugin:$bootPluginVersion"
1111
classpath "io.spring.gradle:dependency-management-plugin:$dependencyPluginVersion"
12-
classpath "io.freefair.gradle:lombok-plugin:$lombokPluginVersion"
1312
}
1413
}
1514

@@ -32,15 +31,10 @@ projects {
3231
id 'java-library-distribution'
3332
id 'org.springframework.boot'
3433
id 'io.spring.dependency-management'
35-
id 'io.freefair.lombok'
3634
}
3735
}
3836
}
3937

4038
enforce {
41-
mergeStrategy = 'append'
42-
43-
rule(enforcer.rules.ForceDependencies) { r ->
44-
r.dependencies.addAll "commons-logging:commons-logging:1.2"
45-
}
39+
enabled = false
4640
}

subprojects/calcite-redisearch/calcite-redisearch.gradle

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,14 @@ dependencyManagement {
55
}
66

77
dependencies {
8-
compileOnly group: 'org.apache.calcite', name: 'calcite-core', version: calciteVersion
9-
compileOnly group: 'org.apache.calcite', name: 'calcite-linq4j', version: calciteVersion
8+
implementation group: 'org.apache.calcite', name: 'calcite-core', version: calciteVersion
9+
implementation group: 'org.apache.calcite', name: 'calcite-linq4j', version: calciteVersion
1010
implementation group: 'com.redis', name: 'lettucemod', version: lettucemodVersion
11-
implementation 'com.redislabs:jredisearch:2.0.0'
12-
testImplementation group: 'org.apache.calcite', name: 'calcite-core', version: calciteVersion
11+
implementation group: 'com.redislabs', name: 'jredisearch', version: jredisearchVersion
1312
testImplementation group: 'org.apache.calcite', name: 'calcite-core', version: calciteVersion, classifier: 'tests'
1413
testImplementation 'org.junit.jupiter:junit-jupiter-api'
1514
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
1615
testImplementation 'org.junit.jupiter:junit-jupiter-params'
1716
testImplementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv'
18-
testImplementation group: 'com.redis.testcontainers', name: 'testcontainers-redis', version: testcontainersRedisVersion
19-
testImplementation group: 'com.redis.testcontainers', name: 'junit-jupiter', version: testcontainersVersion
20-
17+
testImplementation group: 'com.redis.testcontainers', name: 'testcontainers-redis-junit-jupiter', version: testcontainersRedisVersion
2118
}

subprojects/calcite-redisearch/src/main/java/org/apache/calcite/adapter/redisearch/RediSearchEnumerator.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
11
package org.apache.calcite.adapter.redisearch;
22

3-
import com.redis.lettucemod.api.search.Document;
4-
import com.redis.lettucemod.api.search.SearchResults;
5-
import lombok.extern.slf4j.Slf4j;
3+
import java.util.Collections;
4+
import java.util.Iterator;
5+
import java.util.List;
6+
67
import org.apache.calcite.linq4j.Enumerator;
78
import org.apache.calcite.rel.type.RelDataTypeFactory;
89
import org.apache.calcite.rel.type.RelDataTypeField;
910
import org.apache.calcite.rel.type.RelDataTypeSystem;
1011
import org.apache.calcite.rel.type.RelProtoDataType;
1112
import org.apache.calcite.sql.type.SqlTypeFactoryImpl;
1213
import org.apache.calcite.sql.type.SqlTypeName;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
1316

14-
import java.util.Collections;
15-
import java.util.Iterator;
16-
import java.util.List;
17+
import com.redis.lettucemod.search.Document;
18+
import com.redis.lettucemod.search.SearchResults;
1719

1820
/**
1921
* Enumerator that reads from a RediSearch Regions.
2022
*/
21-
@Slf4j
2223
class RediSearchEnumerator implements Enumerator<Object> {
24+
25+
private static final Logger log = LoggerFactory.getLogger(RediSearchEnumerator.class);
2326

2427
private final Iterator<Document<String, String>> iterator;
2528
private final List<RelDataTypeField> fields;

subprojects/calcite-redisearch/src/main/java/org/apache/calcite/adapter/redisearch/RediSearchFilter.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package org.apache.calcite.adapter.redisearch;
22

3-
import com.google.common.base.Preconditions;
4-
import com.redis.lettucemod.api.search.Field;
5-
import io.redisearch.querybuilder.QueryBuilder;
6-
import io.redisearch.querybuilder.QueryNode;
7-
import io.redisearch.querybuilder.Value;
8-
import io.redisearch.querybuilder.Values;
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.stream.Collectors;
8+
import java.util.stream.Stream;
9+
910
import org.apache.calcite.plan.RelOptCluster;
1011
import org.apache.calcite.plan.RelOptCost;
1112
import org.apache.calcite.plan.RelOptPlanner;
@@ -22,12 +23,13 @@
2223
import org.apache.calcite.rex.RexNode;
2324
import org.apache.calcite.sql.SqlKind;
2425

25-
import java.util.ArrayList;
26-
import java.util.Collections;
27-
import java.util.List;
28-
import java.util.Map;
29-
import java.util.stream.Collectors;
30-
import java.util.stream.Stream;
26+
import com.google.common.base.Preconditions;
27+
import com.redis.lettucemod.search.Field;
28+
29+
import io.redisearch.querybuilder.QueryBuilder;
30+
import io.redisearch.querybuilder.QueryNode;
31+
import io.redisearch.querybuilder.Value;
32+
import io.redisearch.querybuilder.Values;
3133

3234
/**
3335
* Implementation of

subprojects/calcite-redisearch/src/main/java/org/apache/calcite/adapter/redisearch/RediSearchRules.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.apache.calcite.adapter.redisearch;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
36
import org.apache.calcite.plan.Convention;
47
import org.apache.calcite.plan.RelOptRule;
58
import org.apache.calcite.plan.RelOptRuleCall;
@@ -24,9 +27,6 @@
2427
import org.apache.calcite.sql.type.SqlTypeName;
2528
import org.apache.calcite.sql.validate.SqlValidatorUtil;
2629

27-
import java.util.ArrayList;
28-
import java.util.List;
29-
3030
/**
3131
* Rules and relational operators for {@link RediSearchRel#CONVENTION}
3232
* calling convention.
Lines changed: 31 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,55 @@
11
package org.apache.calcite.adapter.redisearch;
22

3-
import com.google.common.collect.ImmutableMap;
4-
import com.redis.lettucemod.RedisModulesClient;
5-
import com.redis.lettucemod.Utils;
6-
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
7-
import com.redis.lettucemod.api.search.Field;
8-
import com.redis.lettucemod.api.search.IndexInfo;
9-
import io.lettuce.core.RedisURI;
10-
import org.apache.calcite.rel.type.RelDataTypeFactory;
11-
import org.apache.calcite.rel.type.RelDataTypeImpl;
12-
import org.apache.calcite.rel.type.RelDataTypeSystem;
13-
import org.apache.calcite.rel.type.RelProtoDataType;
3+
import java.util.Collections;
4+
import java.util.List;
5+
import java.util.Map;
6+
147
import org.apache.calcite.schema.Table;
158
import org.apache.calcite.schema.impl.AbstractSchema;
16-
import org.apache.calcite.sql.type.SqlTypeFactoryImpl;
17-
import org.apache.calcite.sql.type.SqlTypeName;
189

19-
import java.util.Map;
10+
import com.google.common.collect.ImmutableMap;
11+
import com.redis.lettucemod.RedisModulesUtils;
12+
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
13+
import com.redis.lettucemod.search.IndexInfo;
2014

2115
/**
2216
* Schema mapped onto a RediSearch index.
2317
*/
2418
public class RediSearchSchema extends AbstractSchema {
2519

26-
private final String index;
2720
private final StatefulRedisModulesConnection<String, String> connection;
28-
29-
public RediSearchSchema(String uri, String index, String username, String password) {
30-
this.index = index;
31-
RedisURI redisURI = RedisURI.create(uri);
32-
if (username != null && password != null) {
33-
redisURI.setUsername(username);
34-
redisURI.setPassword(password.toCharArray());
21+
private final Map<String, Table> tableMap;
22+
23+
public RediSearchSchema(StatefulRedisModulesConnection<String, String> connection, String index) {
24+
this.connection = connection;
25+
if (index == null) {
26+
this.tableMap = this.createTables(this.indicesFromRediSearch());
27+
} else {
28+
this.tableMap = this.createTables(Collections.singletonList(index));
3529
}
36-
RedisModulesClient client = RedisModulesClient.create(redisURI);
37-
this.connection = client.connect();
3830
}
3931

40-
@Override
41-
protected Map<String, Table> getTableMap() {
42-
final ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder();
43-
builder.put(index, new RediSearchTable(this, index));
44-
return builder.build();
32+
private List<String> indicesFromRediSearch() {
33+
return connection.sync().list();
4534
}
4635

47-
public StatefulRedisModulesConnection<String, String> getConnection() {
48-
return connection;
49-
}
36+
private Map<String, Table> createTables(List<String> indices) {
37+
ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder();
5038

51-
public IndexInfo getIndexInfo() {
52-
return Utils.indexInfo(connection.sync().indexInfo(index));
39+
for (String index : indices) {
40+
builder.put(index, new RediSearchTable(connection, indexInfo(index)));
41+
}
42+
43+
return builder.build();
5344
}
5445

55-
private SqlTypeName sqlTypeName(Field field) {
56-
if (field.getType() == Field.Type.NUMERIC) {
57-
return SqlTypeName.DOUBLE;
58-
}
59-
return SqlTypeName.VARCHAR;
46+
@Override
47+
protected Map<String, Table> getTableMap() {
48+
return this.tableMap;
6049
}
6150

62-
public RelProtoDataType getRelDataType() {
63-
final RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
64-
final RelDataTypeFactory.Builder fieldInfo = typeFactory.builder();
65-
IndexInfo indexInfo = getIndexInfo();
66-
for (Field field : indexInfo.getFields()) {
67-
fieldInfo.add(field.getName(), typeFactory.createSqlType(sqlTypeName(field))).nullable(true);
68-
}
69-
return RelDataTypeImpl.proto(fieldInfo.build());
51+
private IndexInfo indexInfo(String index) {
52+
return RedisModulesUtils.indexInfo(connection.sync().indexInfo(index));
7053
}
54+
7155
}

0 commit comments

Comments
 (0)