Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Questdb
提交
14435253
Q
Questdb
项目概览
jobily
/
Questdb
9 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
Questdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
14435253
编写于
8月 14, 2023
作者:
A
Alex Pelagenko
提交者:
GitHub
8月 14, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(sql): fix alter table dedup enable syntax (#3643)
上级
0afe0545
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
76 addition
and
7 deletion
+76
-7
core/src/main/java/io/questdb/cairo/DedupColumnCommitAddresses.java
...ain/java/io/questdb/cairo/DedupColumnCommitAddresses.java
+4
-2
core/src/main/java/io/questdb/cairo/TableWriter.java
core/src/main/java/io/questdb/cairo/TableWriter.java
+1
-2
core/src/main/java/io/questdb/griffin/SqlCompilerImpl.java
core/src/main/java/io/questdb/griffin/SqlCompilerImpl.java
+7
-0
core/src/main/java/io/questdb/griffin/SqlKeywords.java
core/src/main/java/io/questdb/griffin/SqlKeywords.java
+15
-0
core/src/main/java/io/questdb/griffin/engine/functions/catalogue/TableListFunctionFactory.java
.../engine/functions/catalogue/TableListFunctionFactory.java
+2
-2
core/src/test/java/io/questdb/test/griffin/CreateTableDedupTest.java
...st/java/io/questdb/test/griffin/CreateTableDedupTest.java
+44
-0
core/src/test/java/io/questdb/test/griffin/wal/DedupInsertFuzzTest.java
...java/io/questdb/test/griffin/wal/DedupInsertFuzzTest.java
+3
-1
未找到文件。
core/src/main/java/io/questdb/cairo/DedupColumnCommitAddresses.java
浏览文件 @
14435253
...
...
@@ -45,7 +45,7 @@ public class DedupColumnCommitAddresses implements Closeable {
private
static
final
long
NULL_VAL_256
=
RESERVED3
+
8L
;
private
static
final
int
RECORD_BYTES
=
(
int
)
(
NULL_VAL_256
+
32L
);
// The data structure in above offsets has to match dedup_column struct in dedup.cpp
private
PagedDirectLongList
addresses
;
private
int
columnCount
;
...
...
@@ -127,8 +127,10 @@ public class DedupColumnCommitAddresses implements Closeable {
}
int
longsPerBlock
=
RECORD_BYTES
/
Long
.
BYTES
;
addresses
.
setBlockSize
(
dedupColumnCount
*
longsPerBlock
);
this
.
columnCount
=
dedupColumnCount
;
}
else
if
(
dedupColumnCount
==
0
)
{
clear
();
}
this
.
columnCount
=
dedupColumnCount
;
}
static
{
...
...
core/src/main/java/io/questdb/cairo/TableWriter.java
浏览文件 @
14435253
...
...
@@ -7569,8 +7569,7 @@ public class TableWriter implements TableWriterAPI, MetadataService, Closeable {
}
dedupColumnCommitAddresses
.
setDedupColumnCount
(
columnsIndexes
.
size
()
-
1
);
}
else
{
if
(
dedupColumnCommitAddresses
==
null
)
{
dedupColumnCommitAddresses
.
clear
();
if
(
dedupColumnCommitAddresses
!=
null
)
{
dedupColumnCommitAddresses
.
setDedupColumnCount
(
0
);
}
}
...
...
core/src/main/java/io/questdb/griffin/SqlCompilerImpl.java
浏览文件 @
14435253
...
...
@@ -876,6 +876,13 @@ public class SqlCompilerImpl implements SqlCompiler, Closeable {
boolean
tsIncludedInDedupColumns
=
false
;
// ALTER TABLE abc DEDUP <ENABLE> UPSERT KEYS(a, b)
// ENABLE word is not mandatory to be compatible v7.3
// where it was omitted from the syntax
if
(
tok
!=
null
&&
isEnableKeyword
(
tok
))
{
tok
=
SqlUtil
.
fetchNext
(
lexer
);
}
if
(
tok
==
null
||
!
isUpsertKeyword
(
tok
))
{
throw
SqlException
.
position
(
lexer
.
lastTokenPosition
()).
put
(
"expected 'upsert'"
);
}
...
...
core/src/main/java/io/questdb/griffin/SqlKeywords.java
浏览文件 @
14435253
...
...
@@ -26,6 +26,7 @@ package io.questdb.griffin;
import
io.questdb.std.Chars
;
import
io.questdb.std.LowerCaseCharSequenceHashSet
;
import
org.jetbrains.annotations.NotNull
;
public
class
SqlKeywords
{
public
static
final
int
CASE_KEYWORD_LENGTH
=
4
;
...
...
@@ -596,6 +597,20 @@ public class SqlKeywords {
&&
(
tok
.
charAt
(
i
)
|
32
)
==
'p'
;
}
public
static
boolean
isEnableKeyword
(
@NotNull
CharSequence
tok
)
{
if
(
tok
.
length
()
!=
6
)
{
return
false
;
}
int
i
=
0
;
return
(
tok
.
charAt
(
i
++)
|
32
)
==
'e'
&&
(
tok
.
charAt
(
i
++)
|
32
)
==
'n'
&&
(
tok
.
charAt
(
i
++)
|
32
)
==
'a'
&&
(
tok
.
charAt
(
i
++)
|
32
)
==
'b'
&&
(
tok
.
charAt
(
i
++)
|
32
)
==
'l'
&&
(
tok
.
charAt
(
i
)
|
32
)
==
'e'
;
}
public
static
boolean
isEndKeyword
(
CharSequence
tok
)
{
if
(
tok
.
length
()
!=
3
)
{
return
false
;
...
...
core/src/main/java/io/questdb/griffin/engine/functions/catalogue/TableListFunctionFactory.java
浏览文件 @
14435253
...
...
@@ -179,7 +179,7 @@ public class TableListFunctionFactory implements FunctionFactory {
}
if
(
col
==
DEDUP_NAME_COLUMN
)
{
int
timestampIndex
=
tableReaderMetadata
.
getTimestampIndex
();
return
timestampIndex
>
0
&&
tableReaderMetadata
.
isWalEnabled
()
&&
tableReaderMetadata
.
isDedupKey
(
timestampIndex
);
return
timestampIndex
>
=
0
&&
tableReaderMetadata
.
isWalEnabled
()
&&
tableReaderMetadata
.
isDedupKey
(
timestampIndex
);
}
return
false
;
}
...
...
@@ -194,7 +194,7 @@ public class TableListFunctionFactory implements FunctionFactory {
@Override
public
long
getLong
(
int
col
)
{
return
o3MaxLag
;
return
o3MaxLag
;
}
@Override
...
...
core/src/test/java/io/questdb/test/griffin/CreateTableDedupTest.java
浏览文件 @
14435253
...
...
@@ -347,6 +347,50 @@ public class CreateTableDedupTest extends AbstractCairoTest {
});
}
@Test
public
void
testEnableDedup
()
throws
Exception
{
String
tableName
=
testName
.
getMethodName
();
ddl
(
"create table "
+
tableName
+
" (ts TIMESTAMP, x long, s symbol) timestamp(ts)"
+
" PARTITION BY DAY WAL DEDUP UPSERT KEYS(ts,s)"
);
assertSql
(
"name\tdedup\n"
+
"testEnableDedup\ttrue\n"
,
"select name, dedup from tables() where name ='"
+
tableName
+
"'"
);
assertSql
(
"column\ttype\tindexed\tindexBlockCapacity\tsymbolCached\tsymbolCapacity\tdesignated\tupsertKey\n"
+
"ts\tTIMESTAMP\tfalse\t0\tfalse\t0\ttrue\ttrue\n"
+
"x\tLONG\tfalse\t0\tfalse\t0\tfalse\tfalse\n"
+
"s\tSYMBOL\tfalse\t256\ttrue\t128\tfalse\ttrue\n"
,
"show columns from '"
+
tableName
+
"'"
);
compile
(
"alter table "
+
tableName
+
" dedup disable"
);
drainWalQueue
();
assertSql
(
"name\tdedup\n"
+
"testEnableDedup\tfalse\n"
,
"select name, dedup from tables() where name ='"
+
tableName
+
"'"
);
compile
(
"alter table "
+
tableName
+
" dedup enable upsert keys(ts)"
);
drainWalQueue
();
assertSql
(
"name\tdedup\n"
+
"testEnableDedup\ttrue\n"
,
"select name, dedup from tables() where name ='"
+
tableName
+
"'"
);
assertSql
(
"column\ttype\tindexed\tindexBlockCapacity\tsymbolCached\tsymbolCapacity\tdesignated\tupsertKey\n"
+
"ts\tTIMESTAMP\tfalse\t0\tfalse\t0\ttrue\ttrue\n"
+
"x\tLONG\tfalse\t0\tfalse\t0\tfalse\tfalse\n"
+
"s\tSYMBOL\tfalse\t256\ttrue\t128\tfalse\tfalse\n"
,
"show columns from '"
+
tableName
+
"'"
);
}
@Test
public
void
testEnableDedupDroppedColumnColumnConcurrently
()
throws
Exception
{
assertMemoryLeak
(()
->
{
...
...
core/src/test/java/io/questdb/test/griffin/wal/DedupInsertFuzzTest.java
浏览文件 @
14435253
...
...
@@ -55,7 +55,9 @@ public class DedupInsertFuzzTest extends AbstractFuzzTest {
public
void
testDedupWithRandomShiftAndStep
()
throws
Exception
{
assertMemoryLeak
(()
->
{
String
tableName
=
testName
.
getMethodName
();
createEmptyTable
(
tableName
,
"DEDUP upsert keys(ts)"
);
createEmptyTable
(
tableName
,
"DEDUP upsert keys(ts, commit)"
);
compile
(
"alter table "
+
tableName
+
" dedup disable"
);
compile
(
"alter table "
+
tableName
+
" dedup enable upsert keys(ts)"
);
ObjList
<
FuzzTransaction
>
transactions
=
new
ObjList
<>();
Rnd
rnd
=
generateRandom
(
LOG
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录