Skip to content

Commit 8a680cf

Browse files
committed
Added query builder and supported more SQL cases
1 parent 599b1ab commit 8a680cf

16 files changed

+517
-324
lines changed

.github/workflows/early-access.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }}
2323
sonatype-username: ${{ secrets.SONATYPE_USERNAME }}
2424
sonatype-password: ${{ secrets.SONATYPE_PASSWORD }}
25-
github-token: ${{ secrets.GIT_ACCESS_TOKEN }}
25+
github-token: ${{ secrets.GITHUB_TOKEN }}
2626
slack-webhook: ${{ secrets.JRELEASER_SLACK_WEBHOOK }}
2727
codecov-token: ${{ secrets.CODECOV_TOKEN }}
2828

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }}
2929
sonatype-username: ${{ secrets.SONATYPE_USERNAME }}
3030
sonatype-password: ${{ secrets.SONATYPE_PASSWORD }}
31-
github-token: ${{ secrets.GIT_ACCESS_TOKEN }}
31+
github-token: ${{ secrets.GITHUB_TOKEN }}
3232
slack-webhook: ${{ secrets.JRELEASER_SLACK_WEBHOOK }}
3333
codecov-token: ${{ secrets.CODECOV_TOKEN }}
3434

README.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
= SQL Redis
22
:linkattrs:
33
:project-owner: redis-field-engineering
4-
:project-name: sql-redis
4+
:project-name: trino-redisearch
55
:project-group: com.redis
66
:project-version: 1.28.0
77

8-
image:https://github.com/{project-owner}/{project-name}/actions/workflows/early-access.yml/badge.svg["Build Status", link="https://github.com/{project-owner}/{project-name}/actions/workflows/early-access.yml"]
8+
image:https://github.com/{project-owner}/sql-redis/actions/workflows/early-access.yml/badge.svg["Build Status", link="https://github.com/{project-owner}/{project-name}/actions/workflows/early-access.yml"]
99
image:https://img.shields.io/maven-central/v/{project-group}/{project-name}[Download, link="https://search.maven.org/#search|ga|1|{project-name}"]
1010
image:https://img.shields.io/nexus/s/{project-group}/{project-name}?server=https%3A%2F%2Fs01.oss.sonatype.org[Snapshot,link="https://s01.oss.sonatype.org/#nexus-search;quick~{project-name}"]
11-
image:https://codecov.io/gh/{project-owner}/{project-name}/branch/master/graph/badge.svg?token=9I4H9NOBRQ["Coverage", link="https://codecov.io/gh/{project-owner}/{project-name}"]
11+
image:https://codecov.io/gh/{project-owner}/sql-redis/branch/master/graph/badge.svg?token=9I4H9NOBRQ["Coverage", link="https://codecov.io/gh/{project-owner}/sql-redis"]
1212

1313
SQL Redis is a SQL interface to RediSearch implemented as a https://trino.io[Trino] connector.

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ subprojects {
6767
}
6868
}
6969
test {
70-
useJUnitPlatform()
70+
maxHeapSize = "1024m"
71+
jvmArgs "-XX:MaxPermSize=256m"
7172
}
7273
bootJar {
7374
enabled = false
@@ -79,5 +80,4 @@ subprojects {
7980

8081
sourceCompatibility = 8
8182
targetCompatibility = 8
82-
8383
}
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.3.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

jreleaser.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,20 @@ release:
8484
- search: '\[deps\] '
8585
- search: '\[translation\] '
8686
- search: '\[build\] '
87-
87+
8888
signing:
8989
active: always
9090
armored: true
9191
files: false
9292

9393
checksum:
9494
files: false
95+
96+
announce:
97+
slack:
98+
active: release
99+
channel: '#field-engineering-announcements'
100+
message: '🚀 SQL Redis {{projectVersion}} has been released! {{releaseNotesUrl}}'
95101

96102
distributions:
97103
trino-redisearch:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
public class RediSearchConfig {
1313

1414
public static final String DEFAULT_SCHEMA = "default";
15-
private static final long DEFAULT_LIMIT = 10000;
15+
public static final long DEFAULT_LIMIT = 10000;
1616

1717
private String defaultSchema = DEFAULT_SCHEMA;
1818
private Optional<String> uri = Optional.empty();

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ public void commit(ConnectorTransactionHandle transaction) {
6161
checkTransaction(transactions.remove(transaction), transaction);
6262
}
6363

64-
@Override
65-
public void rollback(ConnectorTransactionHandle transaction) {
66-
RediSearchMetadata metadata = transactions.remove(transaction);
67-
checkTransaction(metadata, transaction);
68-
metadata.rollback();
69-
}
64+
// @Override
65+
// public void rollback(ConnectorTransactionHandle transaction) {
66+
// RediSearchMetadata metadata = transactions.remove(transaction);
67+
// checkTransaction(metadata, transaction);
68+
// metadata.rollback();
69+
// }
7070

7171
@Override
7272
public ConnectorSplitManager getSplitManager() {

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

Lines changed: 75 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,20 @@
11
package com.redis.trino;
22

3-
import static com.google.common.base.Preconditions.checkState;
4-
import static com.google.common.collect.ImmutableList.toImmutableList;
53
import static java.lang.Math.toIntExact;
64
import static java.util.Objects.requireNonNull;
75
import static java.util.stream.Collectors.toList;
86

9-
import java.util.Collection;
107
import java.util.List;
118
import java.util.Map;
129
import java.util.Optional;
1310
import java.util.OptionalInt;
14-
import java.util.concurrent.atomic.AtomicReference;
1511

1612
import com.google.common.collect.ImmutableList;
1713
import com.google.common.collect.ImmutableMap;
1814

19-
import io.airlift.slice.Slice;
2015
import io.trino.spi.connector.ColumnHandle;
2116
import io.trino.spi.connector.ColumnMetadata;
22-
import io.trino.spi.connector.ConnectorInsertTableHandle;
2317
import io.trino.spi.connector.ConnectorMetadata;
24-
import io.trino.spi.connector.ConnectorNewTableLayout;
25-
import io.trino.spi.connector.ConnectorOutputMetadata;
26-
import io.trino.spi.connector.ConnectorOutputTableHandle;
2718
import io.trino.spi.connector.ConnectorSession;
2819
import io.trino.spi.connector.ConnectorTableHandle;
2920
import io.trino.spi.connector.ConnectorTableMetadata;
@@ -34,13 +25,13 @@
3425
import io.trino.spi.connector.NotFoundException;
3526
import io.trino.spi.connector.SchemaTableName;
3627
import io.trino.spi.connector.SchemaTablePrefix;
28+
import io.trino.spi.connector.TableNotFoundException;
3729
import io.trino.spi.predicate.TupleDomain;
38-
import io.trino.spi.statistics.ComputedStatistics;
3930

4031
public class RediSearchMetadata implements ConnectorMetadata {
4132

4233
private final RediSearchSession rediSearchSession;
43-
private final AtomicReference<Runnable> rollbackAction = new AtomicReference<>();
34+
// private final AtomicReference<Runnable> rollbackAction = new AtomicReference<>();
4435
private final String schemaName;
4536

4637
public RediSearchMetadata(RediSearchSession rediSearchSession) {
@@ -58,7 +49,11 @@ public RediSearchTableHandle getTableHandle(ConnectorSession session, SchemaTabl
5849
requireNonNull(tableName, "tableName is null");
5950

6051
if (tableName.getSchemaName().equals(schemaName)) {
61-
return rediSearchSession.getTable(tableName).getTableHandle();
52+
try {
53+
return rediSearchSession.getTable(tableName).getTableHandle();
54+
} catch (TableNotFoundException e) {
55+
// ignore and return null
56+
}
6257
}
6358
return null;
6459
}
@@ -119,65 +114,55 @@ public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTable
119114
return ((RediSearchColumnHandle) columnHandle).toColumnMetadata();
120115
}
121116

122-
@Override
123-
public void createTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, boolean ignoreExisting) {
124-
rediSearchSession.createTable(tableMetadata.getTable(), buildColumnHandles(tableMetadata));
125-
}
126-
127-
@Override
128-
public void dropTable(ConnectorSession session, ConnectorTableHandle tableHandle) {
129-
RediSearchTableHandle table = (RediSearchTableHandle) tableHandle;
130-
131-
rediSearchSession.dropTable(table.getSchemaTableName());
132-
}
133-
134-
@Override
135-
public void addColumn(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnMetadata column) {
136-
rediSearchSession.addColumn(((RediSearchTableHandle) tableHandle).getSchemaTableName(), column);
137-
}
138-
139-
@Override
140-
public void dropColumn(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle column) {
141-
// TODO
142-
}
143-
144-
@Override
145-
public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata,
146-
Optional<ConnectorNewTableLayout> layout) {
147-
List<RediSearchColumnHandle> columns = buildColumnHandles(tableMetadata);
148-
149-
rediSearchSession.createTable(tableMetadata.getTable(), columns);
150-
151-
setRollback(() -> rediSearchSession.dropTable(tableMetadata.getTable()));
152-
153-
return new RediSearchOutputTableHandle(tableMetadata.getTable(),
154-
columns.stream().filter(c -> !c.isHidden()).collect(toList()));
155-
}
156-
157-
@Override
158-
public Optional<ConnectorOutputMetadata> finishCreateTable(ConnectorSession session,
159-
ConnectorOutputTableHandle tableHandle, Collection<Slice> fragments,
160-
Collection<ComputedStatistics> computedStatistics) {
161-
clearRollback();
162-
return Optional.empty();
163-
}
164-
165-
@Override
166-
public ConnectorInsertTableHandle beginInsert(ConnectorSession session, ConnectorTableHandle tableHandle) {
167-
RediSearchTableHandle table = (RediSearchTableHandle) tableHandle;
168-
List<RediSearchColumnHandle> columns = rediSearchSession.getTable(table.getSchemaTableName()).getColumns();
169-
170-
return new RediSearchInsertTableHandle(table.getSchemaTableName(),
171-
columns.stream().filter(column -> !column.isHidden())
172-
.peek(column -> validateColumnNameForInsert(column.getName())).collect(toImmutableList()));
173-
}
174-
175-
@Override
176-
public Optional<ConnectorOutputMetadata> finishInsert(ConnectorSession session,
177-
ConnectorInsertTableHandle insertHandle, Collection<Slice> fragments,
178-
Collection<ComputedStatistics> computedStatistics) {
179-
return Optional.empty();
180-
}
117+
// @Override
118+
// public void createTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, boolean ignoreExisting) {
119+
// rediSearchSession.createTable(tableMetadata.getTable(), buildColumnHandles(tableMetadata));
120+
// }
121+
//
122+
// @Override
123+
// public void dropTable(ConnectorSession session, ConnectorTableHandle tableHandle) {
124+
// RediSearchTableHandle table = (RediSearchTableHandle) tableHandle;
125+
//
126+
// rediSearchSession.dropTable(table.getSchemaTableName());
127+
// }
128+
//
129+
// @Override
130+
// public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata,
131+
// Optional<ConnectorNewTableLayout> layout) {
132+
// List<RediSearchColumnHandle> columns = buildColumnHandles(tableMetadata);
133+
//
134+
// rediSearchSession.createTable(tableMetadata.getTable(), columns);
135+
//
136+
// setRollback(() -> rediSearchSession.dropTable(tableMetadata.getTable()));
137+
//
138+
// return new RediSearchOutputTableHandle(tableMetadata.getTable(),
139+
// columns.stream().filter(c -> !c.isHidden()).collect(toList()));
140+
// }
141+
142+
// @Override
143+
// public Optional<ConnectorOutputMetadata> finishCreateTable(ConnectorSession session,
144+
// ConnectorOutputTableHandle tableHandle, Collection<Slice> fragments,
145+
// Collection<ComputedStatistics> computedStatistics) {
146+
// clearRollback();
147+
// return Optional.empty();
148+
// }
149+
150+
// @Override
151+
// public ConnectorInsertTableHandle beginInsert(ConnectorSession session, ConnectorTableHandle tableHandle) {
152+
// RediSearchTableHandle table = (RediSearchTableHandle) tableHandle;
153+
// List<RediSearchColumnHandle> columns = rediSearchSession.getTable(table.getSchemaTableName()).getColumns();
154+
//
155+
// return new RediSearchInsertTableHandle(table.getSchemaTableName(),
156+
// columns.stream().filter(column -> !column.isHidden())
157+
// .peek(column -> validateColumnNameForInsert(column.getName())).collect(toImmutableList()));
158+
// }
159+
//
160+
// @Override
161+
// public Optional<ConnectorOutputMetadata> finishInsert(ConnectorSession session,
162+
// ConnectorInsertTableHandle insertHandle, Collection<Slice> fragments,
163+
// Collection<ComputedStatistics> computedStatistics) {
164+
// return Optional.empty();
165+
// }
181166

182167
@Override
183168
public boolean usesLegacyTableLayouts() {
@@ -225,17 +210,17 @@ public Optional<ConstraintApplicationResult<ConnectorTableHandle>> applyFilter(C
225210
return Optional.of(new ConstraintApplicationResult<>(handle, constraint.getSummary(), false));
226211
}
227212

228-
private void setRollback(Runnable action) {
229-
checkState(rollbackAction.compareAndSet(null, action), "rollback action is already set");
230-
}
231-
232-
private void clearRollback() {
233-
rollbackAction.set(null);
234-
}
213+
// private void setRollback(Runnable action) {
214+
// checkState(rollbackAction.compareAndSet(null, action), "rollback action is already set");
215+
// }
216+
//
217+
// private void clearRollback() {
218+
// rollbackAction.set(null);
219+
// }
235220

236-
public void rollback() {
237-
Optional.ofNullable(rollbackAction.getAndSet(null)).ifPresent(Runnable::run);
238-
}
221+
// public void rollback() {
222+
// Optional.ofNullable(rollbackAction.getAndSet(null)).ifPresent(Runnable::run);
223+
// }
239224

240225
private static SchemaTableName getTableName(ConnectorTableHandle tableHandle) {
241226
return ((RediSearchTableHandle) tableHandle).getSchemaTableName();
@@ -251,14 +236,14 @@ private ConnectorTableMetadata getTableMetadata(ConnectorSession session, Schema
251236
return new ConnectorTableMetadata(tableName, columns);
252237
}
253238

254-
private static List<RediSearchColumnHandle> buildColumnHandles(ConnectorTableMetadata tableMetadata) {
255-
return tableMetadata.getColumns().stream()
256-
.map(m -> new RediSearchColumnHandle(m.getName(), m.getType(), m.isHidden())).collect(toList());
257-
}
239+
// private static List<RediSearchColumnHandle> buildColumnHandles(ConnectorTableMetadata tableMetadata) {
240+
// return tableMetadata.getColumns().stream()
241+
// .map(m -> new RediSearchColumnHandle(m.getName(), m.getType(), m.isHidden())).collect(toList());
242+
// }
258243

259-
private static void validateColumnNameForInsert(String columnName) {
260-
if (columnName.contains("$") || columnName.contains(".")) {
261-
throw new IllegalArgumentException("Column name must not contain '$' or '.' for INSERT: " + columnName);
262-
}
263-
}
244+
// private static void validateColumnNameForInsert(String columnName) {
245+
// if (columnName.contains("$") || columnName.contains(".")) {
246+
// throw new IllegalArgumentException("Column name must not contain '$' or '.' for INSERT: " + columnName);
247+
// }
248+
// }
264249
}

0 commit comments

Comments
 (0)