@@ -2957,6 +2957,114 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
2957
2957
#endif
2958
2958
}
2959
2959
2960
+ Y_UNIT_TEST (CreateTableAddIndexGlobalUnique) {
2961
+ NYql::TAstParseResult result = SqlToYql (R"sql( USE plato;
2962
+ CREATE TABLE table (
2963
+ pk INT32 NOT NULL,
2964
+ col String,
2965
+ INDEX idx GLOBAL UNIQUE ON(col),
2966
+ PRIMARY KEY (pk))
2967
+ )sql" );
2968
+ UNIT_ASSERT_C (result.IsOk (), result.Issues .ToString ());
2969
+ UNIT_ASSERT (result.Root );
2970
+
2971
+ TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) {
2972
+ Y_UNUSED (word);
2973
+ UNIT_ASSERT_STRING_CONTAINS (line, R"( 'indexType 'syncGlobalUnique)" );
2974
+ };
2975
+
2976
+ TWordCountHive elementStat ({TString (" \' indexName \'\" idx\" " )});
2977
+ VerifyProgram (result, elementStat, verifyLine);
2978
+ UNIT_ASSERT_VALUES_EQUAL (1 , elementStat[" \' indexName \'\" idx\" " ]);
2979
+ }
2980
+
2981
+ Y_UNIT_TEST (CreateTableAddIndexGlobalUniqueSync) {
2982
+ NYql::TAstParseResult result = SqlToYql (R"sql( USE plato;
2983
+ CREATE TABLE table (
2984
+ pk INT32 NOT NULL,
2985
+ col String,
2986
+ INDEX idx GLOBAL UNIQUE SYNC ON(col),
2987
+ PRIMARY KEY (pk))
2988
+ )sql" );
2989
+ UNIT_ASSERT_C (result.IsOk (), result.Issues .ToString ());
2990
+ UNIT_ASSERT (result.Root );
2991
+
2992
+ TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) {
2993
+ Y_UNUSED (word);
2994
+ UNIT_ASSERT_STRING_CONTAINS (line, R"( 'indexType 'syncGlobalUnique)" );
2995
+ };
2996
+
2997
+ TWordCountHive elementStat ({TString (" \' indexName \'\" idx\" " )});
2998
+ VerifyProgram (result, elementStat, verifyLine);
2999
+ UNIT_ASSERT_VALUES_EQUAL (1 , elementStat[" \' indexName \'\" idx\" " ]);
3000
+ }
3001
+
3002
+ Y_UNIT_TEST (CreateTableAddIndexGlobalUniqueAsync) {
3003
+ #if ANTLR_VER == 3
3004
+ ExpectFailWithFuzzyError (R"sql( USE plato;
3005
+ CREATE TABLE table (
3006
+ pk INT32 NOT NULL,
3007
+ col String,
3008
+ INDEX idx GLOBAL UNIQUE ASYNC ON(col),
3009
+ PRIMARY KEY (pk))
3010
+ )sql" ,
3011
+ " <main>:5:41: Error: unique: alternative is not implemented yet: \\ d+:\\ d+: global_index\\ n" );
3012
+ #else
3013
+ ExpectFailWithError (R"sql( USE plato;
3014
+ CREATE TABLE table (
3015
+ pk INT32 NOT NULL,
3016
+ col String,
3017
+ INDEX idx GLOBAL UNIQUE ASYNC ON(col),
3018
+ PRIMARY KEY (pk))
3019
+ )sql" ,
3020
+ " <main>:5:41: Error: unique: alternative is not implemented yet: \n " );
3021
+ #endif
3022
+ }
3023
+
3024
+ Y_UNIT_TEST (AlterTableAddIndexGlobalUnique) {
3025
+ NYql::TAstParseResult result = SqlToYql (R"sql( USE plato;
3026
+ ALTER TABLE table ADD INDEX idx GLOBAL UNIQUE ON(col))sql" );
3027
+ UNIT_ASSERT_C (result.IsOk (), result.Issues .ToString ());
3028
+ UNIT_ASSERT (result.Root );
3029
+
3030
+ TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) {
3031
+ Y_UNUSED (word);
3032
+ UNIT_ASSERT_STRING_CONTAINS (line, R"( 'indexType 'syncGlobalUnique)" );
3033
+ };
3034
+
3035
+ TWordCountHive elementStat ({TString (" \' indexName \'\" idx\" " )});
3036
+ VerifyProgram (result, elementStat, verifyLine);
3037
+ UNIT_ASSERT_VALUES_EQUAL (1 , elementStat[" \' indexName \'\" idx\" " ]);
3038
+ }
3039
+
3040
+ Y_UNIT_TEST (AlterTableAddIndexGlobalUniqueSync) {
3041
+ NYql::TAstParseResult result = SqlToYql (R"sql( USE plato;
3042
+ ALTER TABLE table ADD INDEX idx GLOBAL UNIQUE SYNC ON(col))sql" );
3043
+ UNIT_ASSERT_C (result.IsOk (), result.Issues .ToString ());
3044
+ UNIT_ASSERT (result.Root );
3045
+
3046
+ TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) {
3047
+ Y_UNUSED (word);
3048
+ UNIT_ASSERT_STRING_CONTAINS (line, R"( 'indexType 'syncGlobalUnique)" );
3049
+ };
3050
+
3051
+ TWordCountHive elementStat ({TString (" \' indexName \'\" idx\" " )});
3052
+ VerifyProgram (result, elementStat, verifyLine);
3053
+ UNIT_ASSERT_VALUES_EQUAL (1 , elementStat[" \' indexName \'\" idx\" " ]);
3054
+ }
3055
+
3056
+ Y_UNIT_TEST (AlterTableAddIndexGlobalUniqueAsync) {
3057
+ #if ANTLR_VER == 3
3058
+ ExpectFailWithFuzzyError (R"sql( USE plato;
3059
+ ALTER TABLE table ADD INDEX idx GLOBAL UNIQUE ASYNC ON(col))sql" ,
3060
+ " <main>:2:59: Error: unique: alternative is not implemented yet: \\ d+:\\ d+: global_index\\ n" );
3061
+ #else
3062
+ ExpectFailWithError (R"sql( USE plato;
3063
+ ALTER TABLE table ADD INDEX idx GLOBAL UNIQUE ASYNC ON(col))sql" ,
3064
+ " <main>:2:59: Error: unique: alternative is not implemented yet: \n " );
3065
+ #endif
3066
+ }
3067
+
2960
3068
Y_UNIT_TEST (CreateTableAddIndexVector) {
2961
3069
const auto result = SqlToYql (R"( USE plato;
2962
3070
CREATE TABLE table (
0 commit comments