jupyter-duckdb 1.2.0.1__py3-none-any.whl → 1.4.111__py3-none-any.whl

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.
Files changed (62) hide show
  1. duckdb_kernel/db/Connection.py +3 -0
  2. duckdb_kernel/db/Table.py +8 -0
  3. duckdb_kernel/db/implementation/duckdb/Connection.py +27 -13
  4. duckdb_kernel/db/implementation/postgres/Connection.py +27 -12
  5. duckdb_kernel/db/implementation/sqlite/Connection.py +9 -3
  6. duckdb_kernel/kernel.py +407 -200
  7. duckdb_kernel/magics/MagicCommand.py +34 -10
  8. duckdb_kernel/magics/MagicCommandCallback.py +11 -7
  9. duckdb_kernel/magics/MagicCommandHandler.py +58 -9
  10. duckdb_kernel/magics/MagicState.py +11 -0
  11. duckdb_kernel/magics/__init__.py +1 -0
  12. duckdb_kernel/parser/DCParser.py +17 -7
  13. duckdb_kernel/parser/LogicParser.py +6 -6
  14. duckdb_kernel/parser/ParserError.py +18 -0
  15. duckdb_kernel/parser/RAParser.py +29 -21
  16. duckdb_kernel/parser/__init__.py +1 -0
  17. duckdb_kernel/parser/elements/DCOperand.py +7 -4
  18. duckdb_kernel/parser/elements/LogicElement.py +0 -2
  19. duckdb_kernel/parser/elements/RAElement.py +4 -1
  20. duckdb_kernel/parser/elements/RARelationReference.py +86 -0
  21. duckdb_kernel/parser/elements/RAUnaryOperator.py +6 -0
  22. duckdb_kernel/parser/elements/__init__.py +2 -1
  23. duckdb_kernel/parser/elements/binary/And.py +1 -1
  24. duckdb_kernel/parser/elements/binary/ConditionalSet.py +37 -10
  25. duckdb_kernel/parser/elements/binary/Cross.py +2 -2
  26. duckdb_kernel/parser/elements/binary/Difference.py +1 -1
  27. duckdb_kernel/parser/elements/binary/Divide.py +1 -1
  28. duckdb_kernel/parser/elements/binary/Division.py +0 -4
  29. duckdb_kernel/parser/elements/binary/FullOuterJoin.py +40 -0
  30. duckdb_kernel/parser/elements/binary/Join.py +4 -1
  31. duckdb_kernel/parser/elements/binary/LeftOuterJoin.py +27 -0
  32. duckdb_kernel/parser/elements/binary/LeftSemiJoin.py +27 -0
  33. duckdb_kernel/parser/elements/binary/RightOuterJoin.py +27 -0
  34. duckdb_kernel/parser/elements/binary/RightSemiJoin.py +27 -0
  35. duckdb_kernel/parser/elements/binary/__init__.py +21 -6
  36. duckdb_kernel/parser/elements/unary/AttributeRename.py +39 -0
  37. duckdb_kernel/parser/elements/unary/Projection.py +1 -1
  38. duckdb_kernel/parser/elements/unary/Rename.py +68 -14
  39. duckdb_kernel/parser/elements/unary/__init__.py +2 -0
  40. duckdb_kernel/parser/tokenizer/Token.py +24 -3
  41. duckdb_kernel/parser/util/QuerySplitter.py +87 -0
  42. duckdb_kernel/parser/util/RenamableColumnList.py +10 -2
  43. duckdb_kernel/tests/__init__.py +76 -0
  44. duckdb_kernel/tests/test_dc.py +483 -0
  45. duckdb_kernel/tests/test_ra.py +1966 -0
  46. duckdb_kernel/tests/test_result_comparison.py +173 -0
  47. duckdb_kernel/tests/test_sql.py +48 -0
  48. duckdb_kernel/util/ResultSetComparator.py +22 -4
  49. duckdb_kernel/util/SQL.py +6 -0
  50. duckdb_kernel/util/TestError.py +4 -0
  51. duckdb_kernel/visualization/Plotly.py +144 -0
  52. duckdb_kernel/visualization/RATreeDrawer.py +34 -2
  53. duckdb_kernel/visualization/__init__.py +1 -0
  54. duckdb_kernel/visualization/lib/__init__.py +53 -0
  55. duckdb_kernel/visualization/lib/plotly-3.0.1.min.js +3879 -0
  56. duckdb_kernel/visualization/lib/ra.css +3 -0
  57. duckdb_kernel/visualization/lib/ra.js +55 -0
  58. {jupyter_duckdb-1.2.0.1.dist-info → jupyter_duckdb-1.4.111.dist-info}/METADATA +53 -19
  59. jupyter_duckdb-1.4.111.dist-info/RECORD +104 -0
  60. {jupyter_duckdb-1.2.0.1.dist-info → jupyter_duckdb-1.4.111.dist-info}/WHEEL +1 -1
  61. jupyter_duckdb-1.2.0.1.dist-info/RECORD +0 -82
  62. {jupyter_duckdb-1.2.0.1.dist-info → jupyter_duckdb-1.4.111.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,3 @@
1
+ .duckdb-query-result:not(.default) {
2
+ display: none
3
+ }
@@ -0,0 +1,55 @@
1
+ function animate_ra(divId, rootNodeId) {
2
+ /*
3
+ const {createApp, onMounted, ref} = Vue
4
+
5
+ createApp({
6
+ setup() {
7
+ onMounted(() => {
8
+ const titles = document.querySelectorAll(`#${divId} title`)
9
+ const gs = [...titles]
10
+ .map(t => [t.textContent, t.parentElement])
11
+ .filter(g => g[1].id && g[1].id.startsWith('node'))
12
+
13
+ console.log(gs)
14
+ })
15
+ }
16
+ }).mount(`#${divId}`)
17
+ */
18
+
19
+ const titles = [...document.querySelectorAll(`#${divId} title`)]
20
+ .filter(p => p.parentElement.id && p.parentElement.id.startsWith('node'))
21
+
22
+ // update cursor
23
+ titles.forEach(t => t.parentElement.style.cursor = 'pointer')
24
+ titles.forEach(t => t.parentElement.style.userSelect = 'none')
25
+
26
+ // update all polygons to handle click events
27
+ titles.forEach(t => {
28
+ t.parentElement.querySelectorAll('polygon')
29
+ .forEach(p => p.style.pointerEvents = 'all')
30
+ })
31
+
32
+ // add click listener for each node
33
+ titles.forEach(t => {
34
+ t.parentElement.addEventListener('click', () => {
35
+ titles.forEach(a => {
36
+ document.querySelectorAll(`.${a.textContent}`)
37
+ .forEach(e => e.style.display = a === t ? 'block' : 'none')
38
+ a.parentElement.querySelectorAll('polygon')
39
+ .forEach(e => e.setAttribute('fill', a === t ? 'rgb(200, 240, 255)' : 'none'))
40
+ })
41
+ })
42
+ })
43
+
44
+ // call listener for root node
45
+ window.setTimeout(() => {
46
+ titles.forEach(t => {
47
+ if (t.textContent === rootNodeId)
48
+ t.dispatchEvent(new MouseEvent('click', {
49
+ bubbles: true,
50
+ cancelable: true,
51
+ view: window
52
+ }))
53
+ })
54
+ }, 100)
55
+ }
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: jupyter-duckdb
3
- Version: 1.2.0.1
3
+ Version: 1.4.111
4
4
  Summary: a basic wrapper kernel for DuckDB
5
5
  Home-page: https://github.com/erictroebs/jupyter-duckdb
6
6
  Author: Eric Tröbs
@@ -12,9 +12,9 @@ Classifier: Operating System :: OS Independent
12
12
  Requires-Python: >=3.10
13
13
  Description-Content-Type: text/markdown
14
14
  Requires-Dist: jupyter
15
- Requires-Dist: graphviz==0.20.3
15
+ Requires-Dist: graphviz==0.21
16
16
  Requires-Dist: checkmarkandcross
17
- Requires-Dist: duckdb==1.2.0
17
+ Requires-Dist: duckdb==1.4.1
18
18
  Dynamic: author
19
19
  Dynamic: author-email
20
20
  Dynamic: classifier
@@ -32,10 +32,6 @@ This is a simple DuckDB wrapper kernel which accepts SQL as input, executes it
32
32
  using a previously loaded DuckDB instance and formats the output as a table.
33
33
  There are some magic commands that make teaching easier with this kernel.
34
34
 
35
- ## Quick Start
36
-
37
- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/git/https%3A%2F%2Fdbgit.prakinf.tu-ilmenau.de%2Fertr8623%2Fjupyter-duckdb.git/master)
38
-
39
35
  ## Table of Contents
40
36
 
41
37
  - [Setup](#setup)
@@ -49,6 +45,7 @@ There are some magic commands that make teaching easier with this kernel.
49
45
  - [Ship Tests With Your Notebook](#ship-tests-with-your-notebooks)
50
46
  - [Relational Algebra](#relational-algebra)
51
47
  - [Domain Calculus](#domain-calculus)
48
+ - [Automated Parser Selection](#automated-parser-selection)
52
49
 
53
50
  ## Setup
54
51
 
@@ -85,6 +82,12 @@ Execute the following command to pull and run a prepared image.
85
82
  docker run -p 8888:8888 troebs/jupyter-duckdb
86
83
  ```
87
84
 
85
+ There is also a second image. It contains an additional instance of PostgreSQL:
86
+
87
+ ```bash
88
+ docker run -p 8888:8888 troebs/jupyter-duckdb:postgresql
89
+ ```
90
+
88
91
  This image can also be used with JupyterHub and the
89
92
  [DockerSpawner / SwarmSpawner](https://github.com/jupyterhub/dockerspawner)
90
93
  and probably with the
@@ -116,28 +119,36 @@ another DuckDB file or a file with SQL statements. In the first case the
116
119
  included tables will be copied to the new database, while in the second case the
117
120
  SQL statements are just executed. We find this feature very useful to work in a
118
121
  temporary copy of the data and therefore be able to restart at any time. The
119
- last optional parameter `WITH_TESTS` is described in
120
- detail [below](#ship-tests-with-your-notebooks).
122
+ optional parameter `NAME` may be used to name a connection and reference it
123
+ later by using the magic command `USE`.
121
124
 
122
125
  ```
123
126
  %CREATE data.duckdb OF my_statements.sql
124
127
  ```
125
128
 
126
129
  `LOAD` on the other hand loads an existing database and returns an error if it
127
- does not exist. (That is why `OF` cannot be used with `LOAD`! `WITH_TESTS` on
128
- the other hand is available also with this magic command.)
130
+ does not exist. (That is why `OF` cannot be used with `LOAD`! `NAME` on the
131
+ other hand is available also with this magic command.)
129
132
 
130
133
  ```
131
134
  %LOAD data.duckdb
132
135
  ```
133
136
 
134
- Only one database can be open at any time. If a new database is created or
135
- loaded, the current one is closed first and saved to disk if necessary.
137
+ Multiple databases can be open at any time. If a new database with the same
138
+ name is created or loaded, the current one is closed first and saved to disk
139
+ if necessary.
136
140
 
137
141
  Please note that `:memory:` is also a valid file path for DuckDB. The data is
138
142
  then stored exclusively in the main memory. In combination with `CREATE`
139
143
  and `OF` this makes it possible to work on a temporary copy in memory.
140
144
 
145
+ Although the name suggests otherwise, the kernel can also be used with other
146
+ databases:
147
+ - **SQLite** is automatically used as a fallback if the DuckDB dependency is
148
+ missing.
149
+ - To connect to a **PostgreSQL** instance, you need to specify a database URI
150
+ starting with `(postgresql|postgres|pgsql|psql|pg)://`.
151
+
141
152
  ### Schema Diagrams
142
153
 
143
154
  The magic command `SCHEMA` can be used to create a simple schema diagram of the
@@ -153,6 +164,10 @@ representation requires more space, but can improve readability.
153
164
  %SCHEMA TD
154
165
  ```
155
166
 
167
+ The optional argument `ONLY`, followed by one or more table names separated by a
168
+ comma, can be used to display only the named tables and all those connected with
169
+ a foreign key.
170
+
156
171
  Graphviz (`dot` in PATH) is required to render schema diagrams.
157
172
 
158
173
  ### Number of Rows
@@ -200,10 +215,10 @@ FROM bar
200
215
 
201
216
  ### Ship Tests With Your Notebooks
202
217
 
203
- Simple tests can be loaded together with the database with the help of
204
- the `WITH_TESTS` parameter. These tests are stored as a JSON file. Each test is
205
- assigned a unique name, a result set and whether the test should check the order
206
- of the result. A very simple test file looks like the following JSON object:
218
+ Simple tests can be loaded from json files with the help of magic command
219
+ `LOAD_TESTS`. These tests are stored as a JSON file. Each test is assigned a
220
+ unique name, a result set and whether the test should check the order of the
221
+ result. A very simple test file looks like the following JSON object:
207
222
 
208
223
  ```json
209
224
  {
@@ -234,6 +249,11 @@ UNION
234
249
  SELECT 1, 'Name 1'
235
250
  ```
236
251
 
252
+ By default, failed tests will display an explanation, but the notebook will
253
+ continue to run. Set the `DUCKDB_TESTS_RAISE_EXCEPTION` environment variable to
254
+ `true` to raise an exception when a test fails. This can be useful for automated
255
+ testing in CI environments.
256
+
237
257
  Disclaimer: The integrated testing is work-in-progress and thus subject to
238
258
  potentially incompatible changes and enhancements.
239
259
 
@@ -244,7 +264,7 @@ magic command `RA` activates the relational algebra mode for a single cell:
244
264
 
245
265
  ```
246
266
  %RA
247
- π a, b (σ c = 1 (R))
267
+ π [a, b][c = 1] (R))
248
268
  ```
249
269
 
250
270
  The supported operations are:
@@ -259,6 +279,11 @@ The supported operations are:
259
279
  - Cross Product `×`
260
280
  - Division `÷`
261
281
 
282
+ The optional flag `ANALYZE` can be used to add an execution diagram to the
283
+ output.
284
+
285
+ You can also add comments to queries using `--` or `/* */`, just like in SQL.
286
+
262
287
  The Dockerfile also installs the Jupyter Lab plugin
263
288
  [jupyter-ra-extension](https://pypi.org/project/jupyter-ra-extension/). It adds
264
289
  the symbols mentioned above and some other supported symbols to the toolbar for
@@ -273,3 +298,12 @@ magic command `DC` activates the domain calculus mode for a single cell:
273
298
  %DC
274
299
  { a, b | R(a, b, c) ∧ c = 1 }
275
300
  ```
301
+
302
+ ### Automated Parser Selection
303
+
304
+ `%ALL_RA` or `%ALL_DC` enables the corresponding parser for all subsequently
305
+ executed cells.
306
+
307
+ If the magic command `%AUTO_PARSER` is added to a cell, a parser is
308
+ automatically selected. If `%GUESS_PARSER` is executed, the parser is
309
+ automatically selected for all subsequent cells.
@@ -0,0 +1,104 @@
1
+ duckdb_kernel/__init__.py,sha256=6auU6zeJrsA4fxPSr2PYamS8fG-SMXTn5YQFXF2cseo,33
2
+ duckdb_kernel/__main__.py,sha256=Z3GwHEBWoQjNm2Y84ijnbA0Lk66L7nsFREuqhZ_ptk0,165
3
+ duckdb_kernel/kernel.json,sha256=_7E8Ci2FSdCvnzCjsOaue8QE8AvpS5JLQuxORO5IGtA,127
4
+ duckdb_kernel/kernel.py,sha256=VOQQXr0Cn3BhFvOr_Oh1f2_OFUOUgvkyz4c55mRwdgs,28484
5
+ duckdb_kernel/db/Column.py,sha256=GM5P6sFdlYK92hiKln5-6038gIDOTxh1AYbR4kiga_w,559
6
+ duckdb_kernel/db/Connection.py,sha256=tBXQBYt9c52RLbpl9sakNuAm0Z84--fhZ4efo8ACz-U,670
7
+ duckdb_kernel/db/Constraint.py,sha256=1YgUHk7s8mHCVedbcuJKyXDykj7_ybbwT3Dk9p2VMis,287
8
+ duckdb_kernel/db/DatabaseError.py,sha256=43zl8yym1f-fxH_UtGIbWnDnBE_TRwr9aCziY9t40QY,41
9
+ duckdb_kernel/db/ForeignKey.py,sha256=iurUAXwTwSIpLXsL0B7BA8jqDTfW4_wkeHxoqQbZwiU,470
10
+ duckdb_kernel/db/Table.py,sha256=HfvGX54kD_XvmLApYSmxtTQNvz2YYaaUNpm4e8dSOVY,934
11
+ duckdb_kernel/db/__init__.py,sha256=PKQYQDCW7VQYxmzhQK6A0Qloka9FdMfeFQMfY-CjBSA,198
12
+ duckdb_kernel/db/error/EmptyResultError.py,sha256=N9Oxi2HDZBKaRQsfRsWpJJGOYX4BjdQqWOU-XvzUzNY,92
13
+ duckdb_kernel/db/error/__init__.py,sha256=oHfhfbcfyTJ3pAPN835omdQcebvJTauuULFx5gm9rq4,47
14
+ duckdb_kernel/db/implementation/duckdb/Connection.py,sha256=nFzj2wjHORFuRn27zfKhHtwu1Hulph7X4ImCaEbQtbQ,7051
15
+ duckdb_kernel/db/implementation/duckdb/__init__.py,sha256=HKogB1es4wOiQUoh7_eT32xnUFLmzoCyR_0LuY9r8YQ,35
16
+ duckdb_kernel/db/implementation/postgres/Connection.py,sha256=0MUNugQa0gEg-YPDZIUEUzOvV0BF9MaPa2J27c1t3N4,9612
17
+ duckdb_kernel/db/implementation/postgres/__init__.py,sha256=HKogB1es4wOiQUoh7_eT32xnUFLmzoCyR_0LuY9r8YQ,35
18
+ duckdb_kernel/db/implementation/postgres/util.py,sha256=4nr1mqXhlwkMVXbJSfJ7dRlUm6UskpvgKApe7GRwmBI,281
19
+ duckdb_kernel/db/implementation/sqlite/Connection.py,sha256=W_7Eb2u2dHl54h5FXGQVc9oIFa6czYMhkNc2UWbTrkE,7118
20
+ duckdb_kernel/db/implementation/sqlite/__init__.py,sha256=HKogB1es4wOiQUoh7_eT32xnUFLmzoCyR_0LuY9r8YQ,35
21
+ duckdb_kernel/magics/MagicCommand.py,sha256=l0EmnqgGZ0HyqQhdTljAaftflVo_RYp-U5UiDftYxAA,3180
22
+ duckdb_kernel/magics/MagicCommandCallback.py,sha256=Otl7Sa53eJtkMU5gBup3VTVCQfr7p00kt-xpnlETVe4,877
23
+ duckdb_kernel/magics/MagicCommandException.py,sha256=MwuWkpA6NoCqz437urdI0RVXhbSbVdziuRoi7slYFPc,49
24
+ duckdb_kernel/magics/MagicCommandHandler.py,sha256=hKNHRfa0BSPei4QXdVlLlbpvZIhJJ91aaT_HTMiK28E,4700
25
+ duckdb_kernel/magics/MagicState.py,sha256=Vt_KwUwQP3446c1snSxS68Skl5AZQzrJd2Q1ETpKuKI,344
26
+ duckdb_kernel/magics/__init__.py,sha256=ggxzDzDEsKMZzYsWw9JqYVJhciJPvPVYGV7oNo9Yp-E,239
27
+ duckdb_kernel/parser/DCParser.py,sha256=Hjlck8k17WhlHZ_zeEoQBP1xbf94bFD7YMEELTC7BnM,2507
28
+ duckdb_kernel/parser/LogicParser.py,sha256=_vZwE5OPRUEN8aEC_fSZAYKR_dpexqNthXog9OFHYRY,1233
29
+ duckdb_kernel/parser/ParserError.py,sha256=qJQVloFtID1HgVDQ1Io247bODT1ic3oO9Z1ZrWR-2Mk,321
30
+ duckdb_kernel/parser/RAParser.py,sha256=pNTnIRH9TzoawGPlM16JCv0KgYu0KZN2K3XC72-pL-4,3324
31
+ duckdb_kernel/parser/__init__.py,sha256=nTmDm1ADvNPDHhVJQLxKYmArNJk6967EUXqn5AkT8FM,126
32
+ duckdb_kernel/parser/elements/DCOperand.py,sha256=qEg_6Us4WV1eK4Bq6oUsmFt_L_x5pJPGce_wSapzIYA,1149
33
+ duckdb_kernel/parser/elements/LogicElement.py,sha256=uH-0Ax6Etp97b3VLnc24RB3rMLCbbPUrCKi2JBBVCLs,251
34
+ duckdb_kernel/parser/elements/LogicOperand.py,sha256=B9NvriloQE5eP734dNMZBZwrdaaIfsuAmZlG1t2eMhs,1021
35
+ duckdb_kernel/parser/elements/LogicOperator.py,sha256=lkM4TAGkXUhsO4w4PLKVA0bgCRGPQQFpNA1FcWWOW9Q,1028
36
+ duckdb_kernel/parser/elements/RABinaryOperator.py,sha256=XN41stGc1e-a4dZ1AQVtQ3lEgjUGNt3dMfYXp85LEeE,538
37
+ duckdb_kernel/parser/elements/RAElement.py,sha256=3qf-ZLQU5WAH_3TvEnfXUg8Y9lE2Fg01D82XutIfgjg,1661
38
+ duckdb_kernel/parser/elements/RAOperand.py,sha256=pghnTYCrrT6MkvynJRgVFPRoMvxIGNB3FTjaq-uCpDQ,1078
39
+ duckdb_kernel/parser/elements/RAOperator.py,sha256=rtqMFBIBBqT-Bwg7Qm4WQwbDrE28Nb74F_7XMeR3ks4,255
40
+ duckdb_kernel/parser/elements/RARelationReference.py,sha256=d3GLFnfNbQ22BzrI61jxUGXCP3RwheeZGDGCpA0CEkc,3404
41
+ duckdb_kernel/parser/elements/RAUnaryOperator.py,sha256=TyMh5Vh6cdeL8muNRBTgnU6I1JJe97OCv5MH09cCJk0,877
42
+ duckdb_kernel/parser/elements/__init__.py,sha256=yZj38th1ogacHU80ExPsjDeAf6dqZsw3jrkuKA7b3kg,619
43
+ duckdb_kernel/parser/elements/binary/Add.py,sha256=XGkZMfab01huk9EaI6JUfzkd2STbV1C_-TyC2guKE8I,190
44
+ duckdb_kernel/parser/elements/binary/And.py,sha256=p6TQE49DtHlMlTkH9GqyrQVcYWsVgdIMTTCxNuNORuQ,267
45
+ duckdb_kernel/parser/elements/binary/ArrowLeft.py,sha256=u4fZSoyT9lfvWXBwuhUl4DdjVZAOqyVIKmMVbpElLD4,203
46
+ duckdb_kernel/parser/elements/binary/ConditionalSet.py,sha256=yzUPWO4KL8BEIQ-SiV00bdLulwHoxgoJRxebyhsRSPU,17884
47
+ duckdb_kernel/parser/elements/binary/Cross.py,sha256=9AFfnpkMApJQulqp81hMOn7yRDZXZJCP1UUaf_-HSrg,705
48
+ duckdb_kernel/parser/elements/binary/Difference.py,sha256=4nyHhjo09UmYjtGNC3xGQxV5ROzCGOpPkyerUN-AlF4,746
49
+ duckdb_kernel/parser/elements/binary/Divide.py,sha256=ubekU4C1wkCTidUSMLEj5neheRx0QjhWSrsPGuXTa1g,265
50
+ duckdb_kernel/parser/elements/binary/Division.py,sha256=FOYxmeNGljRETwygtVn102POCUmt71t9DXdAnLFCXZM,1535
51
+ duckdb_kernel/parser/elements/binary/Equal.py,sha256=xd5eMwVwM7thXqmoBg-JSux4y6osxxznNzaChmgrnGI,192
52
+ duckdb_kernel/parser/elements/binary/FullOuterJoin.py,sha256=fXyz-eTVO4uzLSG4wky-SKh93u0Rzuxjlp_w-MVHS-M,1550
53
+ duckdb_kernel/parser/elements/binary/GreaterThan.py,sha256=lW7EPYjwwZ1VLZOE4ai6MBW7Zq5itsUTi_v6FxoAuU0,204
54
+ duckdb_kernel/parser/elements/binary/GreaterThanEqual.py,sha256=gO1I3J5CZwrpqZb5Oc-WJ_fCnGylpj4YKl4s-ZAr_-4,286
55
+ duckdb_kernel/parser/elements/binary/Intersection.py,sha256=K6NrwcLTJ1BUccifVQ2R2YHR5B71LhjuLhOalxZcM0g,757
56
+ duckdb_kernel/parser/elements/binary/Join.py,sha256=t_PPV7rGXob34ls27IiNkSzgB5yg-XYhuKO9xDkLqQY,992
57
+ duckdb_kernel/parser/elements/binary/LeftOuterJoin.py,sha256=HKQIQaV7Er6WYVqpdGgeVbe_DNEUwBoxL9CC0k9ZYBQ,1013
58
+ duckdb_kernel/parser/elements/binary/LeftSemiJoin.py,sha256=sWzG5f3H8nGxmXbJUQFVpEZHjJOAcYo5unm3VvGrTIg,994
59
+ duckdb_kernel/parser/elements/binary/LessThan.py,sha256=gNlyAvew0VyvU8x3ol88zbdh_t9GU51Kd2P_PmHUrAc,201
60
+ duckdb_kernel/parser/elements/binary/LessThanEqual.py,sha256=BKKXBZ4TZQ4EBxBDSNzIpFl4Oz1IGI0tI0Oj7KZUoDo,283
61
+ duckdb_kernel/parser/elements/binary/Minus.py,sha256=1XUTXCA0GcAcCnv9nq4B9ewT0XHJ91LlZGEW1y60POA,192
62
+ duckdb_kernel/parser/elements/binary/Multiply.py,sha256=OctlfN71izFYxIpMo09Qwq-3BmQmSh6-PNKBljMsBrg,195
63
+ duckdb_kernel/parser/elements/binary/Or.py,sha256=e1H_BuY7TQD7XHKGqJYLOebYQvrh1euWOUsXF0FT5dY,264
64
+ duckdb_kernel/parser/elements/binary/RightOuterJoin.py,sha256=cakJNIor_AQRe7LBrQVu2ZN_eksVAZqSVBy1EBFahLA,1035
65
+ duckdb_kernel/parser/elements/binary/RightSemiJoin.py,sha256=B7adyKnIRiwrqZ4wQkz81O_1e6xFkHFajTtSZz-jpS0,1015
66
+ duckdb_kernel/parser/elements/binary/Unequal.py,sha256=1hnC1RcPMxwKKv65OL5prunGgh9cRVDmzJutmtl7gtY,269
67
+ duckdb_kernel/parser/elements/binary/Union.py,sha256=VYTj4M2PVEhWiDwjnyP8qpVVbGvIBSVshlEt-SZYCBY,739
68
+ duckdb_kernel/parser/elements/binary/__init__.py,sha256=-4ZY6vpsiyT8eDkLwyFGHJFWXIMCNYNz9ejFFcjEG5U,1451
69
+ duckdb_kernel/parser/elements/unary/AttributeRename.py,sha256=iMRjU2idjr22-CIR5FIupCKPtxc4WjsrzSbeTxLEQmY,1275
70
+ duckdb_kernel/parser/elements/unary/Not.py,sha256=kG0a-dp3TNjPodUMPiQ6ihtsBrbvn1iWeIPCvtyAwdo,632
71
+ duckdb_kernel/parser/elements/unary/Projection.py,sha256=CcSSLWdDHk1U5JSLhY_NFTdus0BoVNDojVVdIE4SYVo,1112
72
+ duckdb_kernel/parser/elements/unary/Rename.py,sha256=opHSTvQ8jh2yZKmTfSiS8a7vchDuvBXbv1jC77E1Mx4,3755
73
+ duckdb_kernel/parser/elements/unary/Selection.py,sha256=TKykDMw0QGQcMFp0r7g6ye4CkjshBTNq14c7qtMkqs4,955
74
+ duckdb_kernel/parser/elements/unary/__init__.py,sha256=70Gjzfk--ua1B3YG__y-2h2hpVookLYzvrj07GA0UaA,336
75
+ duckdb_kernel/parser/tokenizer/Token.py,sha256=gsCzgU_zLiA-yD0FWvd2qS9LQUXbivESYH-34Glffqs,2404
76
+ duckdb_kernel/parser/tokenizer/Tokenizer.py,sha256=PWGgS7gYgpULiKGDho842UbaXuqmwEkccixuF10oi5g,5081
77
+ duckdb_kernel/parser/tokenizer/__init__.py,sha256=EOSmfc2RJwtB5cE1Hhj1JAra97tckxxS8-legybPy60,58
78
+ duckdb_kernel/parser/util/QuerySplitter.py,sha256=CXpF--muxC5NuSr1xc6-EVaP-ZBXLCkDNZb6zYkRTJk,2222
79
+ duckdb_kernel/parser/util/RenamableColumn.py,sha256=LxJhFDMUv_OxYYDLwKn63QGpBRfs08jVvhuJTzRtc9c,704
80
+ duckdb_kernel/parser/util/RenamableColumnList.py,sha256=5oEDbtvl4YfHbkxu_Ny2pc0EYnhCZsf7EeoNQvftbrU,3281
81
+ duckdb_kernel/parser/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
+ duckdb_kernel/tests/__init__.py,sha256=-BoPfo1FNQKnvAYt22Ioc21dbuO67QVFaV_SmS1zQw8,2731
83
+ duckdb_kernel/tests/test_dc.py,sha256=E-PppvBU6AuLFpg0M3chFscm-2Kuv2rkz85PL2NCESc,15968
84
+ duckdb_kernel/tests/test_ra.py,sha256=-1SHhD99tZpO_YidW70LNHUHCEwv9-vBQs3-vg7DbRY,83066
85
+ duckdb_kernel/tests/test_result_comparison.py,sha256=TQVLPKKNyV2k3i4jCfasetPfVfCzgYZr92wxQmlzPnA,3859
86
+ duckdb_kernel/tests/test_sql.py,sha256=p7UEokoJs2xc-url7xQ4PmWKxtExrDDYnMeoyR1JD0A,1208
87
+ duckdb_kernel/util/ResultSetComparator.py,sha256=AoG4kUjMgyZRga6J4QVRUYyvDYXm1dMDa3VWpC3KYoQ,2925
88
+ duckdb_kernel/util/SQL.py,sha256=-uRfa0IwEQueZNZ7vkBPczLuvm_87y4_nnMBx3FgqNk,643
89
+ duckdb_kernel/util/TestError.py,sha256=iwlGHr9j6pFDa2cGxqGyvJ-exrFUtPJjVm_OhHi4n3g,97
90
+ duckdb_kernel/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
+ duckdb_kernel/util/formatting.py,sha256=cbt0CtERnqtzd97mLrOjeJpqM2Lo6pW96BjAYqrOTD8,793
92
+ duckdb_kernel/visualization/Drawer.py,sha256=D0LkiGMvuJ2v6cQSg_axLTGaM4VXAJEQJAynvedQ3So,296
93
+ duckdb_kernel/visualization/Plotly.py,sha256=eWW7mFJ18rbKf-CsvzaLx0wWsyPep7lByVeuUaf4-Ho,3203
94
+ duckdb_kernel/visualization/RATreeDrawer.py,sha256=5ayWknm6PhEqOZ3Pfba8gZD_7pXzCjyTuUOtdKA8Y-o,2947
95
+ duckdb_kernel/visualization/SchemaDrawer.py,sha256=9K-TUUmyeGdMYMTFQJ7evIU3p8p2KyMKeizUc7-y8co,3015
96
+ duckdb_kernel/visualization/__init__.py,sha256=37a-YUXb7Hr4NJCMatpjtmwP2FOPME-5wUWpszrYEMk,100
97
+ duckdb_kernel/visualization/lib/__init__.py,sha256=LYi0YPtn5fXOejbLIqbt_3KzP-XrwpN8l0JzoAI_ngg,1044
98
+ duckdb_kernel/visualization/lib/plotly-3.0.1.min.js,sha256=oy6Be7Eh6eiQFs5M7oXuPxxm9qbJXEtTpfSI93dW16Q,4653932
99
+ duckdb_kernel/visualization/lib/ra.css,sha256=foz1v69EQ117BDduB9QyHH978PbRs2TG1kBS4VGqZbI,57
100
+ duckdb_kernel/visualization/lib/ra.js,sha256=VzMRn55ztcd5Kfu2B6gdRPARpi8n-fvs8oNFnfp55Ec,1845
101
+ jupyter_duckdb-1.4.111.dist-info/METADATA,sha256=Zs-JHGyIYzccetftKagZG_LkK94Fs8szFOuVAb6Dbzw,9272
102
+ jupyter_duckdb-1.4.111.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
103
+ jupyter_duckdb-1.4.111.dist-info/top_level.txt,sha256=KvRRPMnmkQNuhyBsXoPmwyt26LRDp0O-0HN6u0Dm5jA,14
104
+ jupyter_duckdb-1.4.111.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,82 +0,0 @@
1
- duckdb_kernel/__init__.py,sha256=6auU6zeJrsA4fxPSr2PYamS8fG-SMXTn5YQFXF2cseo,33
2
- duckdb_kernel/__main__.py,sha256=Z3GwHEBWoQjNm2Y84ijnbA0Lk66L7nsFREuqhZ_ptk0,165
3
- duckdb_kernel/kernel.json,sha256=_7E8Ci2FSdCvnzCjsOaue8QE8AvpS5JLQuxORO5IGtA,127
4
- duckdb_kernel/kernel.py,sha256=wEEH7ZH7lbOvCa8NUe_5yuGT0P45Qg37NPzGT1-BMLc,19396
5
- duckdb_kernel/db/Column.py,sha256=GM5P6sFdlYK92hiKln5-6038gIDOTxh1AYbR4kiga_w,559
6
- duckdb_kernel/db/Connection.py,sha256=5pH-CwGh-r9Q2QwJKGSxvoINBU-sqmvZyG4Q1digfeE,599
7
- duckdb_kernel/db/Constraint.py,sha256=1YgUHk7s8mHCVedbcuJKyXDykj7_ybbwT3Dk9p2VMis,287
8
- duckdb_kernel/db/DatabaseError.py,sha256=43zl8yym1f-fxH_UtGIbWnDnBE_TRwr9aCziY9t40QY,41
9
- duckdb_kernel/db/ForeignKey.py,sha256=iurUAXwTwSIpLXsL0B7BA8jqDTfW4_wkeHxoqQbZwiU,470
10
- duckdb_kernel/db/Table.py,sha256=6M_CTBV3QlrL_7CdYfu6s9LelXBQ5RdMUAyntE6xcDI,746
11
- duckdb_kernel/db/__init__.py,sha256=PKQYQDCW7VQYxmzhQK6A0Qloka9FdMfeFQMfY-CjBSA,198
12
- duckdb_kernel/db/error/EmptyResultError.py,sha256=N9Oxi2HDZBKaRQsfRsWpJJGOYX4BjdQqWOU-XvzUzNY,92
13
- duckdb_kernel/db/error/__init__.py,sha256=oHfhfbcfyTJ3pAPN835omdQcebvJTauuULFx5gm9rq4,47
14
- duckdb_kernel/db/implementation/duckdb/Connection.py,sha256=znJ9mTbE4pjCLTVY_10PRAq_mv7NnxnnOuXOkKCNtSo,6395
15
- duckdb_kernel/db/implementation/duckdb/__init__.py,sha256=HKogB1es4wOiQUoh7_eT32xnUFLmzoCyR_0LuY9r8YQ,35
16
- duckdb_kernel/db/implementation/postgres/Connection.py,sha256=K8DRKJ5UyAJgRhMMIivhfUNzFIDarc_EmwCuRaPBGQ0,8810
17
- duckdb_kernel/db/implementation/postgres/__init__.py,sha256=HKogB1es4wOiQUoh7_eT32xnUFLmzoCyR_0LuY9r8YQ,35
18
- duckdb_kernel/db/implementation/postgres/util.py,sha256=4nr1mqXhlwkMVXbJSfJ7dRlUm6UskpvgKApe7GRwmBI,281
19
- duckdb_kernel/db/implementation/sqlite/Connection.py,sha256=51I9G03PRLmreV2vlb7VVYjooAW13vlcFnimNuliLdo,6888
20
- duckdb_kernel/db/implementation/sqlite/__init__.py,sha256=HKogB1es4wOiQUoh7_eT32xnUFLmzoCyR_0LuY9r8YQ,35
21
- duckdb_kernel/magics/MagicCommand.py,sha256=OoQ6j4cNtIYjaK4MPVzJyv1eYTNu4_a7qoRx-5G3Hg0,2346
22
- duckdb_kernel/magics/MagicCommandCallback.py,sha256=r1kkJyRR7sZnrnlMH3w4bGqDAJL-BVTIB4-Kn66ynlM,764
23
- duckdb_kernel/magics/MagicCommandException.py,sha256=MwuWkpA6NoCqz437urdI0RVXhbSbVdziuRoi7slYFPc,49
24
- duckdb_kernel/magics/MagicCommandHandler.py,sha256=4njm49cNnLBH9j8GazrmA-wF8XkXfSioJDuCoDyumqc,2749
25
- duckdb_kernel/magics/__init__.py,sha256=DA8gnQeRCUt1Scy3_NQ9w5CPmMEY9i8YwB-g392pN1U,204
26
- duckdb_kernel/parser/DCParser.py,sha256=ciNdM_ZFfa10bBlAc_bB2tKmPOxnXBcAGpYROjbAkVY,2120
27
- duckdb_kernel/parser/LogicParser.py,sha256=PI4NTe4UZIsnEvoAe_LgpEtmGraTTmYOsUk5_Qr3QOk,1137
28
- duckdb_kernel/parser/RAParser.py,sha256=PcyqVxsfHlHJexHy77tL6XIubA2eArBUqbrw13BZz6Q,2891
29
- duckdb_kernel/parser/__init__.py,sha256=Tcq5YTgF-FQSgleSx-nGzUXfR_GR02DKUNDKgBskKVQ,99
30
- duckdb_kernel/parser/elements/DCOperand.py,sha256=RGj_n-v4BimiK3bMGSwOtV03g2FTg-97d4lJ8tPUZmM,977
31
- duckdb_kernel/parser/elements/LogicElement.py,sha256=YasKHxWLDDP8UdyLIKbXzqIRA8-XaakjmvTj-1Iuzyc,280
32
- duckdb_kernel/parser/elements/LogicOperand.py,sha256=B9NvriloQE5eP734dNMZBZwrdaaIfsuAmZlG1t2eMhs,1021
33
- duckdb_kernel/parser/elements/LogicOperator.py,sha256=lkM4TAGkXUhsO4w4PLKVA0bgCRGPQQFpNA1FcWWOW9Q,1028
34
- duckdb_kernel/parser/elements/RABinaryOperator.py,sha256=XN41stGc1e-a4dZ1AQVtQ3lEgjUGNt3dMfYXp85LEeE,538
35
- duckdb_kernel/parser/elements/RAElement.py,sha256=d6QWO8KlWcwhA4tXtWsf8K4oT3OMMjTvEnUD4yaWQ_c,1468
36
- duckdb_kernel/parser/elements/RAOperand.py,sha256=pghnTYCrrT6MkvynJRgVFPRoMvxIGNB3FTjaq-uCpDQ,1078
37
- duckdb_kernel/parser/elements/RAOperator.py,sha256=rtqMFBIBBqT-Bwg7Qm4WQwbDrE28Nb74F_7XMeR3ks4,255
38
- duckdb_kernel/parser/elements/RAUnaryOperator.py,sha256=XC1nphkSm88JaEu5V_HKnb_8JNoeBfE3EvNL4o0qh2c,654
39
- duckdb_kernel/parser/elements/__init__.py,sha256=4DA2M43hh9d1fZb5Z6YnTTI-IBkDyhChSF5L9X3EA-s,547
40
- duckdb_kernel/parser/elements/binary/Add.py,sha256=XGkZMfab01huk9EaI6JUfzkd2STbV1C_-TyC2guKE8I,190
41
- duckdb_kernel/parser/elements/binary/And.py,sha256=0jgetTG8yo5TJSeK70Kj-PI9ERyek1eyMQXX5HBxa4Y,274
42
- duckdb_kernel/parser/elements/binary/ArrowLeft.py,sha256=u4fZSoyT9lfvWXBwuhUl4DdjVZAOqyVIKmMVbpElLD4,203
43
- duckdb_kernel/parser/elements/binary/ConditionalSet.py,sha256=OKpUsTP3HzsDg0vVkb3JqWZd5AUL1RnZXmF-8qWoRq8,16649
44
- duckdb_kernel/parser/elements/binary/Cross.py,sha256=jVY3cvD6qDWZkJ7q74lFUPO2VdDt4aAjdk2YAfg-ZC4,687
45
- duckdb_kernel/parser/elements/binary/Difference.py,sha256=ZVRgJHYVMOFwnc97oPvGtKvLvHsjSCsn2Aao6ymxY8Y,742
46
- duckdb_kernel/parser/elements/binary/Divide.py,sha256=d7mzaOeRYSRO1F-2IHsv_C939TuYtLppbf4-5GSRJXs,265
47
- duckdb_kernel/parser/elements/binary/Division.py,sha256=Tq98RzGHN7QYF3R2ZVpwIiLhSIMQXzRgIuZ7l0D2fXg,1624
48
- duckdb_kernel/parser/elements/binary/Equal.py,sha256=xd5eMwVwM7thXqmoBg-JSux4y6osxxznNzaChmgrnGI,192
49
- duckdb_kernel/parser/elements/binary/GreaterThan.py,sha256=lW7EPYjwwZ1VLZOE4ai6MBW7Zq5itsUTi_v6FxoAuU0,204
50
- duckdb_kernel/parser/elements/binary/GreaterThanEqual.py,sha256=gO1I3J5CZwrpqZb5Oc-WJ_fCnGylpj4YKl4s-ZAr_-4,286
51
- duckdb_kernel/parser/elements/binary/Intersection.py,sha256=K6NrwcLTJ1BUccifVQ2R2YHR5B71LhjuLhOalxZcM0g,757
52
- duckdb_kernel/parser/elements/binary/Join.py,sha256=9Z3JinEav3ulLbZZZM9DLbprloHC0oGuSm40Kf1A0mM,836
53
- duckdb_kernel/parser/elements/binary/LessThan.py,sha256=gNlyAvew0VyvU8x3ol88zbdh_t9GU51Kd2P_PmHUrAc,201
54
- duckdb_kernel/parser/elements/binary/LessThanEqual.py,sha256=BKKXBZ4TZQ4EBxBDSNzIpFl4Oz1IGI0tI0Oj7KZUoDo,283
55
- duckdb_kernel/parser/elements/binary/Minus.py,sha256=1XUTXCA0GcAcCnv9nq4B9ewT0XHJ91LlZGEW1y60POA,192
56
- duckdb_kernel/parser/elements/binary/Multiply.py,sha256=OctlfN71izFYxIpMo09Qwq-3BmQmSh6-PNKBljMsBrg,195
57
- duckdb_kernel/parser/elements/binary/Or.py,sha256=e1H_BuY7TQD7XHKGqJYLOebYQvrh1euWOUsXF0FT5dY,264
58
- duckdb_kernel/parser/elements/binary/Unequal.py,sha256=1hnC1RcPMxwKKv65OL5prunGgh9cRVDmzJutmtl7gtY,269
59
- duckdb_kernel/parser/elements/binary/Union.py,sha256=VYTj4M2PVEhWiDwjnyP8qpVVbGvIBSVshlEt-SZYCBY,739
60
- duckdb_kernel/parser/elements/binary/__init__.py,sha256=PtZgC0vOQONRx0FnFvzaxK9dYobdCykbQATP20djivA,983
61
- duckdb_kernel/parser/elements/unary/Not.py,sha256=kG0a-dp3TNjPodUMPiQ6ihtsBrbvn1iWeIPCvtyAwdo,632
62
- duckdb_kernel/parser/elements/unary/Projection.py,sha256=CJ-MIf1-__1ewTjNZVy5hOz3Z18CWnCDNJBxUdpWXVQ,1112
63
- duckdb_kernel/parser/elements/unary/Rename.py,sha256=Zr2n9EJ3nA476lND0Djz2b6493nnsbSpJ9kkEgk5B_Y,1273
64
- duckdb_kernel/parser/elements/unary/Selection.py,sha256=TKykDMw0QGQcMFp0r7g6ye4CkjshBTNq14c7qtMkqs4,955
65
- duckdb_kernel/parser/elements/unary/__init__.py,sha256=48EDygy0pD7l3J_BlXGc-b7HYPaiHQa1-0Mcsj9Xzr0,270
66
- duckdb_kernel/parser/tokenizer/Token.py,sha256=vwN5hHg11kqzOHLeL5GO1c1BbCTZzYDTuy0QR4kDzew,1800
67
- duckdb_kernel/parser/tokenizer/Tokenizer.py,sha256=PWGgS7gYgpULiKGDho842UbaXuqmwEkccixuF10oi5g,5081
68
- duckdb_kernel/parser/tokenizer/__init__.py,sha256=EOSmfc2RJwtB5cE1Hhj1JAra97tckxxS8-legybPy60,58
69
- duckdb_kernel/parser/util/RenamableColumn.py,sha256=LxJhFDMUv_OxYYDLwKn63QGpBRfs08jVvhuJTzRtc9c,704
70
- duckdb_kernel/parser/util/RenamableColumnList.py,sha256=GfhdGv4KYT64Z9YA9TCn-7hhcEcc3Gu3vI2zMZ52w-8,3015
71
- duckdb_kernel/parser/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- duckdb_kernel/util/ResultSetComparator.py,sha256=RZDIfjJyx8-eR-HIqQlEYgZd_V1ympbszpVRF4TlA7o,2262
73
- duckdb_kernel/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- duckdb_kernel/util/formatting.py,sha256=cbt0CtERnqtzd97mLrOjeJpqM2Lo6pW96BjAYqrOTD8,793
75
- duckdb_kernel/visualization/Drawer.py,sha256=D0LkiGMvuJ2v6cQSg_axLTGaM4VXAJEQJAynvedQ3So,296
76
- duckdb_kernel/visualization/RATreeDrawer.py,sha256=j-Vy1zpYMzwZ3CsphyfPW-J7ou9a9tM6aXXgAlQTgDI,2128
77
- duckdb_kernel/visualization/SchemaDrawer.py,sha256=9K-TUUmyeGdMYMTFQJ7evIU3p8p2KyMKeizUc7-y8co,3015
78
- duckdb_kernel/visualization/__init__.py,sha256=5eMJmxJ01XAXcgWDn3t70eSZF2PGaXdNo6GK-x-0H3s,78
79
- jupyter_duckdb-1.2.0.1.dist-info/METADATA,sha256=1A3zmDclWZqxD2LMY8uYNUnkP3EksA263pFA_wmtXuo,7980
80
- jupyter_duckdb-1.2.0.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
81
- jupyter_duckdb-1.2.0.1.dist-info/top_level.txt,sha256=KvRRPMnmkQNuhyBsXoPmwyt26LRDp0O-0HN6u0Dm5jA,14
82
- jupyter_duckdb-1.2.0.1.dist-info/RECORD,,