mirror of
https://github.com/hanzo-ds/driver.git
synced 2026-10-30 20:32:40 +00:00
The wire protocol was the last holdout and it was not cosmetic: the Hanzo Datastore server reads X-Datastore-User, and answers a request bearing X-ClickHouse-User with 401. Verified against the live server, both directions. So a client still sending the old headers is not merely off-brand, it cannot authenticate over HTTP. Everything else follows: types, dialects, error modules, docstrings and doc links now name Datastore, and doc URLs point at docs.hanzo.ai/datastore rather than the upstream vendor's site. Zero occurrences of the old name remain. Still cut from the pinned upstream version, so behaviour is unchanged.
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
try:
|
|
import numpy as np
|
|
except ImportError:
|
|
np = None
|
|
|
|
from tests.numpy.testcase import NumpyBaseTestCase
|
|
|
|
|
|
class BoolTestCase(NumpyBaseTestCase):
|
|
n = 10
|
|
# https://docs.hanzo.ai/datastore/en/whats-new/changelog/2021
|
|
required_server_version = (21, 12, 0)
|
|
|
|
def check_result(self, rv, col_type):
|
|
data = (np.array(range(self.n)) % 2).astype(bool)
|
|
self.assertArraysEqual(rv[0], data)
|
|
self.assertEqual(rv[0].dtype, col_type)
|
|
|
|
def get_query(self, ch_type):
|
|
with self.create_table('a {}'.format(ch_type)):
|
|
data = [(np.array(range(self.n)) % 2).astype(bool)]
|
|
self.client.execute(
|
|
'INSERT INTO test (a) VALUES', data, columnar=True
|
|
)
|
|
|
|
query = 'SELECT * FROM test'
|
|
inserted = self.emit_cli(query)
|
|
self.assertEqual(
|
|
inserted, '\n'.join(str(x).lower() for x in data[0]) + '\n'
|
|
)
|
|
return self.client.execute(query, columnar=True)
|
|
|
|
def test_bool(self):
|
|
rv = self.get_query('Bool')
|
|
self.check_result(rv, np.bool_)
|
|
|
|
def test_insert_nan_into_non_nullable(self):
|
|
with self.create_table('a Bool'):
|
|
data = [
|
|
np.array([True, np.nan], dtype=object)
|
|
]
|
|
self.client.execute(
|
|
'INSERT INTO test (a) VALUES', data, columnar=True
|
|
)
|
|
|
|
query = 'SELECT * FROM test'
|
|
inserted = self.emit_cli(query)
|
|
self.assertEqual(
|
|
inserted,
|
|
'true\nfalse\n'
|
|
)
|
|
|
|
inserted = self.client.execute(query, columnar=True)
|
|
self.assertArraysEqual(inserted[0], np.array([True, 0]))
|
|
self.assertEqual(inserted[0].dtype, np.bool_)
|
|
|
|
def test_nullable(self):
|
|
with self.create_table('a Nullable(Bool)'):
|
|
data = [np.array([False, None, True, None, False])]
|
|
self.client.execute(
|
|
'INSERT INTO test (a) VALUES', data, columnar=True
|
|
)
|
|
|
|
query = 'SELECT * FROM test'
|
|
inserted = self.emit_cli(query)
|
|
self.assertEqual(inserted, 'false\n\\N\ntrue\n\\N\nfalse\n')
|
|
|
|
inserted = self.client.execute(query, columnar=True)
|
|
self.assertArraysEqual(inserted[0], data[0])
|
|
self.assertEqual(inserted[0].dtype, object)
|