scylla-cqlsh 6.0.18__tar.gz → 6.0.19__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scylla-cqlsh might be problematic. Click here for more details.
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/.github/workflows/build-push.yml +22 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/PKG-INFO +1 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/bin/cqlsh.py +8 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlsh/cqlsh.py +8 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/_version.py +2 -2
- {scylla_cqlsh-6.0.18/pylib → scylla_cqlsh-6.0.19}/cqlshlib/cql3handling.py +43 -2
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19/pylib}/cqlshlib/cql3handling.py +43 -2
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_cqlsh_completion.py +63 -9
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_cqlsh_output.py +60 -9
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pyproject.toml +1 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/reloc/build_reloc.sh +1 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/requirements.txt +1 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scylla_cqlsh.egg-info/PKG-INFO +1 -1
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/.dockerignore +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/.github/workflows/dockerhub-description.yml +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/.gitignore +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/Dockerfile +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/LICENSE.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/README.md +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/SCYLLA-VERSION-GEN +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/bin/cqlsh +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlsh/__init__.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlsh/__main__.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/__init__.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/authproviderhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/copyutil.c +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/copyutil.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/cqlhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/cqlshhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/displaying.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/formatting.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/helptopics.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/pylexotron.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/saferscanner.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/sslhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/tracing.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/util.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/cqlshlib/wcwidth.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/changelog.template +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/control.template +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/debian/compat +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/debian/copyright +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/debian/rules +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/debian/source/format +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/debian/source/options +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/debian/debian_files_gen.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/dist/redhat/scylla-cqlsh.spec +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/install-dependencies.sh +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/install.sh +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/Dockerfile.ubuntu.py3 +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/Dockerfile.ubuntu.py37 +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/Dockerfile.ubuntu.py38 +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/README.asc +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cassandra-cqlsh-tests.sh +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/__init__.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/authproviderhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/copyutil.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/cqlhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/cqlshhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/displaying.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/formatting.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/helptopics.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/pylexotron.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/saferscanner.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/sslhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/__init__.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/ansi_colors.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/basecase.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/cassconnect.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/reserved_keywords.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/run_cqlsh.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/complex_auth_provider +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/complex_auth_provider_creds +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/complex_auth_provider_with_pass +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/empty_example +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/full_plain_text_example +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/illegal_example +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/no_classname_example +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/partial_example +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_full_creds +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_legacy +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_partial_creds +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling_config/plain_text_partial_example +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_constants.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_copyutil.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_cql_parsing.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_keyspace_init.cql +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_legacy_auth.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_unicode.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/winpty.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/tracing.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/util.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/wcwidth.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/requirements.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/setup.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/reloc/build_deb.sh +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/reloc/build_rpm.sh +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scripts/create-relocatable-package.py +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scylla_cqlsh.egg-info/SOURCES.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scylla_cqlsh.egg-info/dependency_links.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scylla_cqlsh.egg-info/entry_points.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scylla_cqlsh.egg-info/requires.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/scylla_cqlsh.egg-info/top_level.txt +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/setup.cfg +0 -0
- {scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/setup.py +0 -0
|
@@ -69,6 +69,28 @@ jobs:
|
|
|
69
69
|
pip install -r ./pylib/requirements.txt
|
|
70
70
|
pytest ./cqlshlib/test
|
|
71
71
|
|
|
72
|
+
integration_test_scylla_enterprise:
|
|
73
|
+
name: Integration Tests (Scylla Enterprise)
|
|
74
|
+
if: "!contains(github.event.pull_request.labels.*.name, 'disable-integration-test')"
|
|
75
|
+
runs-on: ubuntu-latest
|
|
76
|
+
steps:
|
|
77
|
+
- uses: actions/checkout@v3
|
|
78
|
+
|
|
79
|
+
- name: Start Scylla
|
|
80
|
+
run: |
|
|
81
|
+
export DOCKER_ID=$(docker run -d scylladb/scylla-enterprise:latest --cluster-name test )
|
|
82
|
+
export CQL_TEST_HOST=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' ${DOCKER_ID})
|
|
83
|
+
while ! nc -z ${CQL_TEST_HOST} 9042; do
|
|
84
|
+
sleep 0.1 # wait for 1/10 of the second before check again
|
|
85
|
+
done
|
|
86
|
+
|
|
87
|
+
echo "CQL_TEST_HOST=${CQL_TEST_HOST}" >> $GITHUB_ENV
|
|
88
|
+
|
|
89
|
+
- name: pytest
|
|
90
|
+
run: |
|
|
91
|
+
pip install -r ./pylib/requirements.txt
|
|
92
|
+
pytest ./cqlshlib/test
|
|
93
|
+
|
|
72
94
|
integration_test_scylla_cloud_bundle:
|
|
73
95
|
name: Integration Tests (Scylla Cloud Bundle)
|
|
74
96
|
if: "!contains(github.event.pull_request.labels.*.name, 'disable-integration-test')"
|
|
@@ -1589,7 +1589,10 @@ class Shell(cmd.Cmd):
|
|
|
1589
1589
|
where object can be either a keyspace or a table or an index or a materialized
|
|
1590
1590
|
view (in this order).
|
|
1591
1591
|
"""
|
|
1592
|
-
|
|
1592
|
+
self._do_describe(parsed, force_client_side_describe=False)
|
|
1593
|
+
|
|
1594
|
+
def _do_describe(self, parsed, force_client_side_describe):
|
|
1595
|
+
if force_client_side_describe:
|
|
1593
1596
|
what = parsed.matched[1][1].lower()
|
|
1594
1597
|
if what == 'functions':
|
|
1595
1598
|
self.describe_functions_client(self.current_keyspace)
|
|
@@ -1665,6 +1668,10 @@ class Shell(cmd.Cmd):
|
|
|
1665
1668
|
elif what:
|
|
1666
1669
|
self.describe_element(result)
|
|
1667
1670
|
|
|
1671
|
+
except cassandra.protocol.SyntaxException:
|
|
1672
|
+
# Server doesn't support DESCRIBE query, retry with
|
|
1673
|
+
# client-side DESCRIBE implementation
|
|
1674
|
+
self._do_describe(parsed, force_client_side_describe=True)
|
|
1668
1675
|
except CQL_ERRORS as err:
|
|
1669
1676
|
err_msg = err.message if hasattr(err, 'message') else str(err)
|
|
1670
1677
|
self.printerr(err_msg.partition("message=")[2].strip('"'))
|
|
@@ -1589,7 +1589,10 @@ class Shell(cmd.Cmd):
|
|
|
1589
1589
|
where object can be either a keyspace or a table or an index or a materialized
|
|
1590
1590
|
view (in this order).
|
|
1591
1591
|
"""
|
|
1592
|
-
|
|
1592
|
+
self._do_describe(parsed, force_client_side_describe=False)
|
|
1593
|
+
|
|
1594
|
+
def _do_describe(self, parsed, force_client_side_describe):
|
|
1595
|
+
if force_client_side_describe:
|
|
1593
1596
|
what = parsed.matched[1][1].lower()
|
|
1594
1597
|
if what == 'functions':
|
|
1595
1598
|
self.describe_functions_client(self.current_keyspace)
|
|
@@ -1665,6 +1668,10 @@ class Shell(cmd.Cmd):
|
|
|
1665
1668
|
elif what:
|
|
1666
1669
|
self.describe_element(result)
|
|
1667
1670
|
|
|
1671
|
+
except cassandra.protocol.SyntaxException:
|
|
1672
|
+
# Server doesn't support DESCRIBE query, retry with
|
|
1673
|
+
# client-side DESCRIBE implementation
|
|
1674
|
+
self._do_describe(parsed, force_client_side_describe=True)
|
|
1668
1675
|
except CQL_ERRORS as err:
|
|
1669
1676
|
err_msg = err.message if hasattr(err, 'message') else str(err)
|
|
1670
1677
|
self.printerr(err_msg.partition("message=")[2].strip('"'))
|
|
@@ -36,8 +36,8 @@ class UnexpectedTableStructure(UserWarning):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
SYSTEM_KEYSPACES = ('system', 'system_schema', 'system_traces', 'system_auth', 'system_distributed', 'system_views',
|
|
39
|
-
'system_virtual_schema', 'system_distributed_everywhere')
|
|
40
|
-
NONALTERBALE_KEYSPACES = ('system', 'system_schema', 'system_views', 'system_virtual_schema', 'system_distributed_everywhere')
|
|
39
|
+
'system_virtual_schema', 'system_distributed_everywhere', 'system_replicated_keys')
|
|
40
|
+
NONALTERBALE_KEYSPACES = ('system', 'system_schema', 'system_views', 'system_virtual_schema', 'system_distributed_everywhere', 'system_replicated_keys')
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class Cql3ParsingRuleSet(CqlParsingRuleSet):
|
|
@@ -296,6 +296,12 @@ JUNK ::= /([ \t\r\f\v]+|(--|[/][/])[^\n\r]*([\n\r]|$)|[/][*].*?[*][/])/ ;
|
|
|
296
296
|
| <alterRoleStatement>
|
|
297
297
|
| <dropRoleStatement>
|
|
298
298
|
| <listRolesStatement>
|
|
299
|
+
| <createSlaStatement>
|
|
300
|
+
| <alterSlaStatement>
|
|
301
|
+
| <dropSlaStatement>
|
|
302
|
+
| <listSlaStatement>
|
|
303
|
+
| <attachSlaStatement>
|
|
304
|
+
| <detachRSlaStatement>
|
|
299
305
|
;
|
|
300
306
|
|
|
301
307
|
<authorizationStatement> ::= <grantStatement>
|
|
@@ -1501,6 +1507,41 @@ syntax_rules += r'''
|
|
|
1501
1507
|
;
|
|
1502
1508
|
'''
|
|
1503
1509
|
|
|
1510
|
+
syntax_rules += r'''
|
|
1511
|
+
<slaName> ::= <identifier>
|
|
1512
|
+
| <quotedName>
|
|
1513
|
+
| <unreservedKeyword>
|
|
1514
|
+
;
|
|
1515
|
+
|
|
1516
|
+
<createSlaStatement> ::= "CREATE" "SERVICE_LEVEL" ( "IF" "NOT" "EXISTS" )? <slaName>
|
|
1517
|
+
( "WITH" <slaProperty> ("AND" <slaProperty>)*)?
|
|
1518
|
+
;
|
|
1519
|
+
|
|
1520
|
+
<alterSlaStatement> ::= "ALTER" "SERVICE_LEVEL" ("IF" "EXISTS")? <slaName>
|
|
1521
|
+
( "WITH" <slaProperty> ("AND" <slaProperty>)*)?
|
|
1522
|
+
;
|
|
1523
|
+
|
|
1524
|
+
<slaProperty> ::= "WORKLOAD_TYPE" "=" <stringLiteral>
|
|
1525
|
+
| "TIMEOUT" "=" <wholenumber>
|
|
1526
|
+
| "SHARES" "=" <wholenumber>
|
|
1527
|
+
;
|
|
1528
|
+
|
|
1529
|
+
<dropSlaStatement> ::= "DROP" "SERVICE_LEVEL" ("IF" "EXISTS")? <slaName>
|
|
1530
|
+
;
|
|
1531
|
+
|
|
1532
|
+
<listSlaStatement> ::= ("LIST" "SERVICE_LEVEL" <slaName> )
|
|
1533
|
+
| ("LIST" "ATTACHED" "SERVICE_LEVEL" "OF" <rolename> )
|
|
1534
|
+
| ("LIST" "ALL" "SERVICE_LEVELS" )
|
|
1535
|
+
| ("LIST" "ALL" "ATTACHED" "SERVICE_LEVELS" )
|
|
1536
|
+
;
|
|
1537
|
+
|
|
1538
|
+
<attachSlaStatement> ::= "ATTACH" "SERVICE_LEVEL" <slaName> "TO" <rolename>
|
|
1539
|
+
;
|
|
1540
|
+
|
|
1541
|
+
<detachRSlaStatement> ::= "DETACH" "SERVICE_LEVEL" <slaName> "FROM" <rolename>
|
|
1542
|
+
;
|
|
1543
|
+
'''
|
|
1544
|
+
|
|
1504
1545
|
syntax_rules += r'''
|
|
1505
1546
|
<grantStatement> ::= "GRANT" <permissionExpr> "ON" <resource> "TO" <rolename>
|
|
1506
1547
|
;
|
|
@@ -36,8 +36,8 @@ class UnexpectedTableStructure(UserWarning):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
SYSTEM_KEYSPACES = ('system', 'system_schema', 'system_traces', 'system_auth', 'system_distributed', 'system_views',
|
|
39
|
-
'system_virtual_schema', 'system_distributed_everywhere')
|
|
40
|
-
NONALTERBALE_KEYSPACES = ('system', 'system_schema', 'system_views', 'system_virtual_schema', 'system_distributed_everywhere')
|
|
39
|
+
'system_virtual_schema', 'system_distributed_everywhere', 'system_replicated_keys')
|
|
40
|
+
NONALTERBALE_KEYSPACES = ('system', 'system_schema', 'system_views', 'system_virtual_schema', 'system_distributed_everywhere', 'system_replicated_keys')
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class Cql3ParsingRuleSet(CqlParsingRuleSet):
|
|
@@ -296,6 +296,12 @@ JUNK ::= /([ \t\r\f\v]+|(--|[/][/])[^\n\r]*([\n\r]|$)|[/][*].*?[*][/])/ ;
|
|
|
296
296
|
| <alterRoleStatement>
|
|
297
297
|
| <dropRoleStatement>
|
|
298
298
|
| <listRolesStatement>
|
|
299
|
+
| <createSlaStatement>
|
|
300
|
+
| <alterSlaStatement>
|
|
301
|
+
| <dropSlaStatement>
|
|
302
|
+
| <listSlaStatement>
|
|
303
|
+
| <attachSlaStatement>
|
|
304
|
+
| <detachRSlaStatement>
|
|
299
305
|
;
|
|
300
306
|
|
|
301
307
|
<authorizationStatement> ::= <grantStatement>
|
|
@@ -1501,6 +1507,41 @@ syntax_rules += r'''
|
|
|
1501
1507
|
;
|
|
1502
1508
|
'''
|
|
1503
1509
|
|
|
1510
|
+
syntax_rules += r'''
|
|
1511
|
+
<slaName> ::= <identifier>
|
|
1512
|
+
| <quotedName>
|
|
1513
|
+
| <unreservedKeyword>
|
|
1514
|
+
;
|
|
1515
|
+
|
|
1516
|
+
<createSlaStatement> ::= "CREATE" "SERVICE_LEVEL" ( "IF" "NOT" "EXISTS" )? <slaName>
|
|
1517
|
+
( "WITH" <slaProperty> ("AND" <slaProperty>)*)?
|
|
1518
|
+
;
|
|
1519
|
+
|
|
1520
|
+
<alterSlaStatement> ::= "ALTER" "SERVICE_LEVEL" ("IF" "EXISTS")? <slaName>
|
|
1521
|
+
( "WITH" <slaProperty> ("AND" <slaProperty>)*)?
|
|
1522
|
+
;
|
|
1523
|
+
|
|
1524
|
+
<slaProperty> ::= "WORKLOAD_TYPE" "=" <stringLiteral>
|
|
1525
|
+
| "TIMEOUT" "=" <wholenumber>
|
|
1526
|
+
| "SHARES" "=" <wholenumber>
|
|
1527
|
+
;
|
|
1528
|
+
|
|
1529
|
+
<dropSlaStatement> ::= "DROP" "SERVICE_LEVEL" ("IF" "EXISTS")? <slaName>
|
|
1530
|
+
;
|
|
1531
|
+
|
|
1532
|
+
<listSlaStatement> ::= ("LIST" "SERVICE_LEVEL" <slaName> )
|
|
1533
|
+
| ("LIST" "ATTACHED" "SERVICE_LEVEL" "OF" <rolename> )
|
|
1534
|
+
| ("LIST" "ALL" "SERVICE_LEVELS" )
|
|
1535
|
+
| ("LIST" "ALL" "ATTACHED" "SERVICE_LEVELS" )
|
|
1536
|
+
;
|
|
1537
|
+
|
|
1538
|
+
<attachSlaStatement> ::= "ATTACH" "SERVICE_LEVEL" <slaName> "TO" <rolename>
|
|
1539
|
+
;
|
|
1540
|
+
|
|
1541
|
+
<detachRSlaStatement> ::= "DETACH" "SERVICE_LEVEL" <slaName> "FROM" <rolename>
|
|
1542
|
+
;
|
|
1543
|
+
'''
|
|
1544
|
+
|
|
1504
1545
|
syntax_rules += r'''
|
|
1505
1546
|
<grantStatement> ::= "GRANT" <permissionExpr> "ON" <resource> "TO" <rolename>
|
|
1506
1547
|
;
|
|
@@ -21,8 +21,12 @@
|
|
|
21
21
|
import locale
|
|
22
22
|
import os
|
|
23
23
|
import re
|
|
24
|
+
|
|
25
|
+
from cassandra import InvalidRequest
|
|
26
|
+
from packaging.version import Version
|
|
27
|
+
|
|
24
28
|
from .basecase import BaseTestCase
|
|
25
|
-
from .cassconnect import create_db, remove_db, testrun_cqlsh
|
|
29
|
+
from .cassconnect import create_db, remove_db, testrun_cqlsh, get_cassandra_connection
|
|
26
30
|
from .run_cqlsh import TimeoutError
|
|
27
31
|
from cqlshlib.cql3handling import CqlRuleSet
|
|
28
32
|
|
|
@@ -48,6 +52,14 @@ class CqlshCompletionCase(BaseTestCase):
|
|
|
48
52
|
output = c.cmd_and_response("SELECT * FROM system_schema.scylla_tables LIMIT 1;")
|
|
49
53
|
cls.is_scylla = '1 rows' in output
|
|
50
54
|
|
|
55
|
+
with get_cassandra_connection().connect() as session:
|
|
56
|
+
try:
|
|
57
|
+
result = session.execute("SELECT version FROM system.versions WHERE key = 'local' LIMIT 1")
|
|
58
|
+
cls.scylla_version = Version(result.one().version.rsplit('.', 2)[0])
|
|
59
|
+
cls.is_scylla_enterprise = cls.scylla_version > Version('2018.1')
|
|
60
|
+
except InvalidRequest:
|
|
61
|
+
cls.is_scylla_enterprise = False
|
|
62
|
+
|
|
51
63
|
@classmethod
|
|
52
64
|
def tearDownClass(cls):
|
|
53
65
|
remove_db()
|
|
@@ -63,6 +75,18 @@ class CqlshCompletionCase(BaseTestCase):
|
|
|
63
75
|
def tearDown(self):
|
|
64
76
|
self.cqlsh_runner.__exit__(None, None, None)
|
|
65
77
|
|
|
78
|
+
def _system_keyspaces(self):
|
|
79
|
+
tables = []
|
|
80
|
+
|
|
81
|
+
if self.is_scylla:
|
|
82
|
+
tables += ['system_distributed_everywhere.']
|
|
83
|
+
if self.is_scylla_enterprise:
|
|
84
|
+
tables += ['system_replicated_keys.']
|
|
85
|
+
else:
|
|
86
|
+
tables += ['system_views.', 'system_virtual_schema.']
|
|
87
|
+
|
|
88
|
+
return tables
|
|
89
|
+
|
|
66
90
|
def _get_completions(self, inputstring, split_completed_lines=True):
|
|
67
91
|
"""
|
|
68
92
|
Get results of tab completion in cqlsh. Returns a bare string if a
|
|
@@ -167,7 +191,7 @@ class TestCqlshCompletion(CqlshCompletionCase):
|
|
|
167
191
|
'COPY', 'CREATE', 'DEBUG', 'DELETE', 'DESC', 'DESCRIBE',
|
|
168
192
|
'DROP', 'GRANT', 'HELP', 'INSERT', 'LIST', 'LOGIN', 'PAGING', 'REVOKE',
|
|
169
193
|
'SELECT', 'SHOW', 'SOURCE', 'TRACING', 'EXPAND', 'SERIAL', 'TRUNCATE',
|
|
170
|
-
'UPDATE', 'USE', 'exit', 'quit', 'CLEAR', 'CLS'))
|
|
194
|
+
'UPDATE', 'USE', 'exit', 'quit', 'CLEAR', 'CLS', 'ATTACH', 'DETACH'))
|
|
171
195
|
|
|
172
196
|
def test_complete_command_words(self):
|
|
173
197
|
self.trycompletions('alt', '\b\b\bALTER ')
|
|
@@ -254,7 +278,7 @@ class TestCqlshCompletion(CqlshCompletionCase):
|
|
|
254
278
|
'EXPAND', 'GRANT', 'HELP', 'INSERT', 'LIST', 'LOGIN', 'PAGING',
|
|
255
279
|
'REVOKE', 'SELECT', 'SHOW', 'SOURCE', 'SERIAL', 'TRACING',
|
|
256
280
|
'TRUNCATE', 'UPDATE', 'USE', 'exit', 'quit',
|
|
257
|
-
'CLEAR', 'CLS'])
|
|
281
|
+
'CLEAR', 'CLS', 'ATTACH', 'DETACH'])
|
|
258
282
|
|
|
259
283
|
self.trycompletions(
|
|
260
284
|
("INSERT INTO twenty_rows_composite_table (a, b, c) "
|
|
@@ -555,7 +579,7 @@ class TestCqlshCompletion(CqlshCompletionCase):
|
|
|
555
579
|
self.trycompletions('DROP ',
|
|
556
580
|
choices=['AGGREGATE', 'COLUMNFAMILY', 'FUNCTION',
|
|
557
581
|
'INDEX', 'KEYSPACE', 'ROLE', 'TABLE',
|
|
558
|
-
'TRIGGER', 'TYPE', 'USER', 'MATERIALIZED'])
|
|
582
|
+
'TRIGGER', 'TYPE', 'USER', 'MATERIALIZED', 'SERVICE_LEVEL'])
|
|
559
583
|
|
|
560
584
|
def test_complete_in_drop_keyspace(self):
|
|
561
585
|
self.trycompletions('DROP K', immediate='EYSPACE ')
|
|
@@ -927,9 +951,8 @@ class TestCqlshCompletion(CqlshCompletionCase):
|
|
|
927
951
|
'utf8_with_special_chars',
|
|
928
952
|
'system_traces.', 'songs',
|
|
929
953
|
'system_schema.', 'system_distributed.',
|
|
930
|
-
self.cqlsh.keyspace + '.'] +
|
|
931
|
-
|
|
932
|
-
['system_views.', 'system_virtual_schema.']))
|
|
954
|
+
self.cqlsh.keyspace + '.'] + self._system_keyspaces()
|
|
955
|
+
)
|
|
933
956
|
self.trycompletions('ALTER TABLE IF EXISTS new_table ADD ', choices=['<new_column_name>', 'IF'])
|
|
934
957
|
self.trycompletions('ALTER TABLE IF EXISTS new_table ADD IF NOT EXISTS ', choices=['<new_column_name>'])
|
|
935
958
|
self.trycompletions('ALTER TABLE new_table ADD IF NOT EXISTS ', choices=['<new_column_name>'])
|
|
@@ -943,8 +966,7 @@ class TestCqlshCompletion(CqlshCompletionCase):
|
|
|
943
966
|
'tags', 'system_traces.', 'system_distributed.',
|
|
944
967
|
'phone_number', 'band_info_type', 'address', 'system.', 'system_schema.',
|
|
945
968
|
'system_auth.', self.cqlsh.keyspace + '.'
|
|
946
|
-
] +
|
|
947
|
-
['system_views.', 'system_virtual_schema.']))
|
|
969
|
+
] + self._system_keyspaces())
|
|
948
970
|
self.trycompletions('ALTER TYPE IF EXISTS new_type ADD ', choices=['<new_field_name>', 'IF'])
|
|
949
971
|
self.trycompletions('ALTER TYPE IF EXISTS new_type ADD IF NOT EXISTS ', choices=['<new_field_name>'])
|
|
950
972
|
self.trycompletions('ALTER TYPE IF EXISTS new_type RENAME ', choices=['IF', '<quotedName>', '<identifier>'])
|
|
@@ -954,3 +976,35 @@ class TestCqlshCompletion(CqlshCompletionCase):
|
|
|
954
976
|
|
|
955
977
|
def test_complete_in_alter_role(self):
|
|
956
978
|
self.trycompletions('ALTER ROLE ', choices=['<identifier>', 'IF', '<quotedName>'])
|
|
979
|
+
|
|
980
|
+
def test_complete_in_alter_service_level(self):
|
|
981
|
+
self.trycompletions('ALTER SERVICE_LEVEL ', choices=['<identifier>', 'IF', '<quotedName>'])
|
|
982
|
+
|
|
983
|
+
def test_complete_in_create_service_level(self):
|
|
984
|
+
self.trycompletions('CREATE SERVICE_LEVEL "sla" WITH ',
|
|
985
|
+
choices=['WORKLOAD_TYPE', 'TIMEOUT', 'SHARES'])
|
|
986
|
+
|
|
987
|
+
def test_complete_in_attach_service_level(self):
|
|
988
|
+
self.trycompletions('ATTACH ',
|
|
989
|
+
immediate="SERVICE_LEVEL ")
|
|
990
|
+
self.trycompletions('ATTACH SERVICE_LEVEL "sla" ',
|
|
991
|
+
immediate="TO ")
|
|
992
|
+
self.trycompletions('ATTACH SERVICE_LEVEL "sla" TO ',
|
|
993
|
+
choices=['<identifier>', '<quotedName>'])
|
|
994
|
+
|
|
995
|
+
def test_complete_in_list_service_levels(self):
|
|
996
|
+
|
|
997
|
+
self.trycompletions("LIST ALL ",
|
|
998
|
+
choices={'ON', 'NORECURSIVE', 'OF', 'ATTACHED', ';', 'SERVICE_LEVELS', 'PERMISSIONS'})
|
|
999
|
+
|
|
1000
|
+
self.trycompletions("LIST ALL SERVICE_LEVELS ",
|
|
1001
|
+
choices={';'})
|
|
1002
|
+
|
|
1003
|
+
self.trycompletions("LIST ALL ATTACHED ",
|
|
1004
|
+
immediate='SERVICE_LEVELS ;')
|
|
1005
|
+
|
|
1006
|
+
self.trycompletions("LIST ATTACHED ",
|
|
1007
|
+
immediate='SERVICE_LEVEL OF ')
|
|
1008
|
+
|
|
1009
|
+
self.trycompletions("LIST SERVICE_LEVEL ",
|
|
1010
|
+
choices={'<quotedName>', '<identifier>'})
|
|
@@ -36,6 +36,44 @@ from .ansi_colors import (ColoredText, ansi_seq, lookup_colorcode,
|
|
|
36
36
|
CONTROL_C = '\x03'
|
|
37
37
|
CONTROL_D = '\x04'
|
|
38
38
|
|
|
39
|
+
def _normalize_response(response):
|
|
40
|
+
def should_keep(line):
|
|
41
|
+
if not line.strip():
|
|
42
|
+
return False
|
|
43
|
+
deprecated_options = ["dclocal_read_repair_chance", "read_repair_chance"]
|
|
44
|
+
for col in deprecated_options:
|
|
45
|
+
if col in line:
|
|
46
|
+
return False
|
|
47
|
+
ignore_options = ["paxos_grace_seconds", "tombstone_gc", "cdc"]
|
|
48
|
+
for col in ignore_options:
|
|
49
|
+
if col in line:
|
|
50
|
+
return False
|
|
51
|
+
return True
|
|
52
|
+
|
|
53
|
+
def normalize(line):
|
|
54
|
+
# normalize 0.0, 1.0 etc to 0, 1 etc.
|
|
55
|
+
line = re.sub(r"\b(\d+)\.0\b", r"\1", line)
|
|
56
|
+
# replace multiple whitespaces with a single whitespace
|
|
57
|
+
line = re.sub(r"\s+", " ", line)
|
|
58
|
+
|
|
59
|
+
line = line.rstrip(";,:")
|
|
60
|
+
|
|
61
|
+
# enforce formatting without whitespace in {ks}.{table} ({col}) and then listing items
|
|
62
|
+
line = re.sub(r"(\w+\.\w+)\s\(", r"\1(", line)
|
|
63
|
+
line = re.sub(r",\s+'", ",'", line)
|
|
64
|
+
if " PRIMARY KEY" in line:
|
|
65
|
+
return {line.replace(" PRIMARY KEY", ""), f"PRIMARY KEY ({line.split()[0]})"}
|
|
66
|
+
if ":" in line:
|
|
67
|
+
return set(line.split(":"))
|
|
68
|
+
return {line}
|
|
69
|
+
|
|
70
|
+
resp = set()
|
|
71
|
+
for s in response.split("\n"):
|
|
72
|
+
if should_keep(s):
|
|
73
|
+
resp.update(normalize(s.strip()))
|
|
74
|
+
|
|
75
|
+
return resp
|
|
76
|
+
|
|
39
77
|
|
|
40
78
|
class TestCqlshOutput(BaseTestCase):
|
|
41
79
|
@classmethod
|
|
@@ -57,6 +95,16 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
57
95
|
cls.is_scylla = len(output.all()) == 1
|
|
58
96
|
except InvalidRequest:
|
|
59
97
|
cls.is_scylla = False
|
|
98
|
+
try:
|
|
99
|
+
result = curs.execute("SELECT version FROM system.versions WHERE key = 'local' LIMIT 1")
|
|
100
|
+
cls.scylla_version = Version(result.one().version.rsplit('.', 2)[0])
|
|
101
|
+
cls.is_scylla_enterprise = cls.scylla_version > Version('2018.1')
|
|
102
|
+
except InvalidRequest:
|
|
103
|
+
cls.is_scylla_enterprise = False
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def default_compaction_strategy(self):
|
|
107
|
+
return 'IncrementalCompactionStrategy' if self.is_scylla_enterprise else 'SizeTieredCompactionStrategy'
|
|
60
108
|
|
|
61
109
|
def setUp(self):
|
|
62
110
|
env = os.environ.copy()
|
|
@@ -684,7 +732,7 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
684
732
|
AND read_repair = 'BLOCKING'
|
|
685
733
|
AND speculative_retry = '99p';""" % quote_name(get_keyspace()))
|
|
686
734
|
|
|
687
|
-
scylla_table_desc = dedent("""
|
|
735
|
+
scylla_table_desc = dedent(f"""
|
|
688
736
|
CREATE TABLE %s.has_all_types (
|
|
689
737
|
num int PRIMARY KEY,
|
|
690
738
|
asciicol ascii,
|
|
@@ -703,10 +751,10 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
703
751
|
varcharcol text,
|
|
704
752
|
varintcol varint
|
|
705
753
|
) WITH bloom_filter_fp_chance = 0.01
|
|
706
|
-
AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
|
|
754
|
+
AND caching = {{'keys': 'ALL', 'rows_per_partition': 'ALL'}}
|
|
707
755
|
AND comment = ''
|
|
708
|
-
AND compaction = {'class': '
|
|
709
|
-
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
|
|
756
|
+
AND compaction = {{'class': '{self.default_compaction_strategy}'}}
|
|
757
|
+
AND compression = {{'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}}
|
|
710
758
|
AND crc_check_chance = 1.0
|
|
711
759
|
AND dclocal_read_repair_chance = 0.0
|
|
712
760
|
AND default_time_to_live = 0
|
|
@@ -726,7 +774,7 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
726
774
|
for semicolon in (';', ''):
|
|
727
775
|
output = c.cmd_and_response('%s has_all_types%s' % (cmdword, semicolon))
|
|
728
776
|
self.assertNoHasColors(output)
|
|
729
|
-
self.
|
|
777
|
+
self.assertSetEqual(_normalize_response(dedent(output)), _normalize_response(table_desc3))
|
|
730
778
|
|
|
731
779
|
def test_describe_columnfamilies_output(self):
|
|
732
780
|
output_re = r'''
|
|
@@ -792,8 +840,9 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
792
840
|
output_re_client = r'''(?x)
|
|
793
841
|
^
|
|
794
842
|
\n
|
|
795
|
-
Cluster: [ ] (?P<clustername> .* )
|
|
796
|
-
Partitioner: [ ] (?P<partitionername> .* )
|
|
843
|
+
Cluster: [ ] (?P<clustername> .* )\s?\n
|
|
844
|
+
Partitioner: [ ] (?P<partitionername> .* )\s?\n
|
|
845
|
+
Snitch: [ ] (?P<snitchname>.*)\n|^\s*$
|
|
797
846
|
\n
|
|
798
847
|
'''
|
|
799
848
|
|
|
@@ -1001,7 +1050,7 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
1001
1050
|
) WITH bloom_filter_fp_chance = 0.01
|
|
1002
1051
|
AND caching = {{'keys': 'ALL', 'rows_per_partition': 'ALL'}}
|
|
1003
1052
|
AND comment = ''
|
|
1004
|
-
AND compaction = {{'class': '
|
|
1053
|
+
AND compaction = {{'class': '{self.default_compaction_strategy}'}}
|
|
1005
1054
|
AND compression = {{'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}}
|
|
1006
1055
|
AND crc_check_chance = 1.0
|
|
1007
1056
|
AND dclocal_read_repair_chance = 0.0
|
|
@@ -1021,4 +1070,6 @@ class TestCqlshOutput(BaseTestCase):
|
|
|
1021
1070
|
output = c.cmd_and_response(f"CREATE TABLE {qks}.ccc (pkey int, PRIMARY KEY(pkey)) WITH cdc = {{'enabled': true}};")
|
|
1022
1071
|
self.assertEquals(output.strip(), "")
|
|
1023
1072
|
output = c.cmd_and_response('describe table {}.ccc'.format(qks))
|
|
1024
|
-
|
|
1073
|
+
lines = _normalize_response(dedent(output))
|
|
1074
|
+
expected_lines = _normalize_response(expected)
|
|
1075
|
+
self.assertTrue(expected_lines.issubset(lines), f"Output lines \n {{{lines}}} \n doesn't contain expected lines\n {{{expected_lines}}}")
|
|
@@ -81,7 +81,7 @@ fi
|
|
|
81
81
|
|
|
82
82
|
python3 -m pip install ${PIP_EXTRA_OPTS} build==0.10.0 wheel==0.37.1 -t ./build/cqlsh_build
|
|
83
83
|
PYTHONPATH=$(pwd)/build/cqlsh_build python3 -m build -s
|
|
84
|
-
PYTHONPATH=$(pwd)/build/cqlsh_build python3 -m pip download ${PIP_EXTRA_OPTS} --constraint ./requirements.txt --no-binary :all:
|
|
84
|
+
PYTHONPATH=$(pwd)/build/cqlsh_build python3 -m pip download ${PIP_EXTRA_OPTS} --constraint ./requirements.txt --no-binary :all: --only-binary cython . -d ./build/pypi_packages
|
|
85
85
|
|
|
86
86
|
for package in $(ls ./build/pypi_packages/*.tar.gz)
|
|
87
87
|
do
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{scylla_cqlsh-6.0.18 → scylla_cqlsh-6.0.19}/pylib/cqlshlib/test/test_authproviderhandling.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|