| 1481 | |
| 1482 | |
| 1483 | class hvPlotTabularDuckDB(hvPlotTabular): |
| 1484 | def _get_converter(self, x=None, y=None, kind=None, **kwds): |
| 1485 | import duckdb |
| 1486 | |
| 1487 | if Version(duckdb.__version__).release < (1, 4, 1): |
| 1488 | from duckdb.typing import ( |
| 1489 | BIGINT, |
| 1490 | FLOAT, |
| 1491 | DOUBLE, |
| 1492 | INTEGER, |
| 1493 | SMALLINT, |
| 1494 | TINYINT, |
| 1495 | UBIGINT, |
| 1496 | UINTEGER, |
| 1497 | USMALLINT, |
| 1498 | UTINYINT, |
| 1499 | HUGEINT, |
| 1500 | ) |
| 1501 | else: |
| 1502 | from duckdb.sqltypes import ( |
| 1503 | BIGINT, |
| 1504 | FLOAT, |
| 1505 | DOUBLE, |
| 1506 | INTEGER, |
| 1507 | SMALLINT, |
| 1508 | TINYINT, |
| 1509 | UBIGINT, |
| 1510 | UINTEGER, |
| 1511 | USMALLINT, |
| 1512 | UTINYINT, |
| 1513 | HUGEINT, |
| 1514 | ) |
| 1515 | |
| 1516 | params = dict(self._metadata, **kwds) |
| 1517 | x = x or params.pop('x', None) |
| 1518 | y = y or params.pop('y', None) |
| 1519 | kind = kind or params.pop('kind', None) |
| 1520 | |
| 1521 | # Handle DuckDB Relation and Connection objects |
| 1522 | if isinstance(self._data, (duckdb.DuckDBPyConnection, duckdb.DuckDBPyRelation)): |
| 1523 | if isinstance(self._data, duckdb.DuckDBPyConnection): |
| 1524 | data = self._data.df() |
| 1525 | else: |
| 1526 | data = self._data |
| 1527 | |
| 1528 | if params.get('hover_cols') != 'all': |
| 1529 | data_columns = data.columns |
| 1530 | possible_columns = [ |
| 1531 | [v] if isinstance(v, str) else v |
| 1532 | for v in params.values() |
| 1533 | if isinstance(v, (str, list)) |
| 1534 | ] |
| 1535 | |
| 1536 | columns = (set(data_columns) & set(itertools.chain(*possible_columns))) or { |
| 1537 | data_columns[0] |
| 1538 | } |
| 1539 | if y is None: |
| 1540 | # When y is not specified HoloViewsConverter finds all the numeric |