chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
# ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
||||
# ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
||||
# ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
||||
# ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
||||
# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
||||
# ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
||||
# ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
||||
# ┃ This file is part of the Perspective library, distributed under the terms ┃
|
||||
# ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
||||
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||||
|
||||
import perspective as psp
|
||||
|
||||
client = psp.Server().new_local_client()
|
||||
|
||||
|
||||
class TestJoin:
|
||||
def test_inner_join_two_tables(self):
|
||||
left = client.table(
|
||||
[{"id": 1, "x": 10}, {"id": 2, "x": 20}, {"id": 3, "x": 30}]
|
||||
)
|
||||
right = client.table(
|
||||
[{"id": 1, "y": "a"}, {"id": 2, "y": "b"}, {"id": 4, "y": "d"}]
|
||||
)
|
||||
joined = client.join(left, right, "id")
|
||||
view = joined.view()
|
||||
json = view.to_json()
|
||||
assert len(json) == 2
|
||||
view.delete()
|
||||
joined.delete()
|
||||
right.delete()
|
||||
left.delete()
|
||||
|
||||
def test_join_has_correct_schema(self):
|
||||
left = client.table({"id": "integer", "x": "float"})
|
||||
right = client.table({"id": "integer", "y": "string"})
|
||||
joined = client.join(left, right, "id")
|
||||
schema = joined.schema()
|
||||
assert schema == {"id": "integer", "x": "float", "y": "string"}
|
||||
joined.delete()
|
||||
right.delete()
|
||||
left.delete()
|
||||
|
||||
def test_join_reacts_to_left_updates(self):
|
||||
left = client.table(
|
||||
[{"id": 1, "x": 10}, {"id": 2, "x": 20}]
|
||||
)
|
||||
right = client.table(
|
||||
[{"id": 1, "y": "a"}, {"id": 2, "y": "b"}]
|
||||
)
|
||||
joined = client.join(left, right, "id")
|
||||
view = joined.view()
|
||||
left.update([{"id": 1, "x": 99}])
|
||||
json = view.to_json()
|
||||
assert json == [
|
||||
{"id": 1, "x": 10, "y": "a"},
|
||||
{"id": 2, "x": 20, "y": "b"},
|
||||
{"id": 1, "x": 99, "y": "a"},
|
||||
]
|
||||
view.delete()
|
||||
joined.delete()
|
||||
right.delete()
|
||||
left.delete()
|
||||
|
||||
def test_left_join(self):
|
||||
left = client.table(
|
||||
[{"id": 1, "x": 10}, {"id": 2, "x": 20}, {"id": 3, "x": 30}]
|
||||
)
|
||||
right = client.table(
|
||||
[{"id": 1, "y": "a"}, {"id": 2, "y": "b"}]
|
||||
)
|
||||
joined = client.join(left, right, "id", "left")
|
||||
view = joined.view()
|
||||
json = view.to_json()
|
||||
assert len(json) == 3
|
||||
view.delete()
|
||||
joined.delete()
|
||||
right.delete()
|
||||
left.delete()
|
||||
|
||||
def test_join_by_table_names(self):
|
||||
left = client.table(
|
||||
[{"id": 1, "x": 10}, {"id": 2, "x": 20}],
|
||||
name="left_py",
|
||||
)
|
||||
right = client.table(
|
||||
[{"id": 1, "y": "a"}, {"id": 2, "y": "b"}],
|
||||
name="right_py",
|
||||
)
|
||||
joined = client.join("left_py", "right_py", "id")
|
||||
view = joined.view()
|
||||
json = view.to_json()
|
||||
assert len(json) == 2
|
||||
view.delete()
|
||||
joined.delete()
|
||||
right.delete()
|
||||
left.delete()
|
||||
|
||||
def test_join_mixed_table_and_string(self):
|
||||
left = client.table(
|
||||
[{"id": 1, "x": 10}, {"id": 2, "x": 20}]
|
||||
)
|
||||
right = client.table(
|
||||
[{"id": 1, "y": "a"}, {"id": 2, "y": "b"}],
|
||||
name="right_py_mixed",
|
||||
)
|
||||
joined = client.join(left, "right_py_mixed", "id")
|
||||
view = joined.view()
|
||||
json = view.to_json()
|
||||
assert len(json) == 2
|
||||
view.delete()
|
||||
joined.delete()
|
||||
right.delete()
|
||||
left.delete()
|
||||
Reference in New Issue
Block a user