{"name": "Snowflake Connector for QGIS", "package_name": "qgis-snowflake-connector", "version": "1.0.24", "experimental": false, "qgis_min": "3.34.1", "qgis_max": "4.99.0", "downloads": 66, "uploaded_by": "snow", "upload_datetime": "2026-08-31T09:26:21.395770", "changelog": "1.0.24 - Packaging/security fixes for the QGIS Plugin Repository\nvalidation scan: annotate two best-effort cleanup try/except blocks (the\nBuffer algorithm's temp-table teardown and the feature iterator's cursor\nclose) with documented bandit B110 suppressions, matching the convention\nalready used elsewhere, and remove the Sphinx help/make.bat Windows helper\nso it no longer trips the suspicious-file check. No user-visible behaviour\nchange.\n1.0.23 - Fix plugin load failure (\"AttributeError: module 'lib'\nhas no attribute 'GEN_EMAIL'\"): this is a cryptography/pyOpenSSL version\nmismatch in the QGIS Python environment (cryptography 49+ removed OpenSSL\nbindings that older pyOpenSSL still references), not a QGIS version issue.\nclassFactory now catches any load-time exception (not just ImportError) so\nthe plugin degrades to a no-op stub with an actionable message instead of a\nraw traceback dialog, and logs the resolved versions and paths of\nsnowflake-connector-python, cryptography and pyOpenSSL to help diagnose\nper-user site-packages shadowing.\n1.0.22 - Fix from end-to-end feature testing: editing a feature on a\nSnowflake layer crashed with \"TypeError: list indices must be integers or\nslices, not str\" because FilterFid/FilterFids requests were pushed down to SQL\nusing a column name as a list index. Feature ids are fetch-order positions, not\nprimary keys, so these requests are now resolved from the in-memory feature\ncache instead, fixing the identify/attribute-table edit workflow.\n1.0.21 - Fix from end-to-end feature testing: the custom Snowflake\nexpression functions (sf_h3_resolution, sf_h3_is_valid, sf_h3_to_string) were\ndeclared with an extra \"node\" parameter that QGIS never injects, so every call\nraised a TypeError and returned NULL in the field calculator, labeling, and\nsymbology. The unused parameter was removed so the functions evaluate\ncorrectly.\n1.0.20 - Fix from end-to-end processing testing: Import from\nSnowflake now stores TIMESTAMP/DATE/TIME columns correctly instead of\nsilently dropping every feature. Snowflake returns temporal values as\nPython datetime objects, which the memory/OGR sink cannot store directly;\nthey are now coerced to QDateTime/QDate/QTime, mirroring the existing\nNUMBER (Decimal) handling.\n1.0.19 - Fixes from end-to-end processing testing:\n* Buffer (server-side) on GEOGRAPHY no longer freezes QGIS. Snowflake's\noptimizer produced a never-returning plan when ST_TRANSFORM and ST_BUFFER\nwere fused in one expression; the reproject/buffer/reproject steps are now\nmaterialized into separate temporary tables.\n* Import from Snowflake now stores numeric (NUMBER) values correctly instead\nof silently dropping every feature (Decimal values are coerced to float).\n* Connections set a bounded STATEMENT_TIMEOUT_IN_SECONDS so a stuck query can\nno longer block the UI indefinitely.\n1.0.18 - Processing algorithms (Buffer, H3 index, Spatial join,\nExecute SQL) now reuse the existing Snowflake connection instead of\nforce-closing and rebuilding it, fixing a UI freeze and the disruption of\nalready-loaded layers when running an algorithm.\n1.0.17 - Correctness and performance fixes from end-to-end testing:\ninteger/NUMBER columns (including primary keys) now display as integers instead\nof decimals; table layers reference their fully-qualified database.schema.table\nso counts/extent/queries no longer depend on the session's current schema;\nsingle-geometry layers use a cheaper feature count; field type names now show\nthe Snowflake source type; and custom SQL-query layers no longer log a\nmisleading \"primary key not verified\" read-only reason.\n1.0.16 - Packaging/metadata cleanup for the QGIS plugin repository:\nremove the deprecated supportsQt6 flag (QGIS 4 compatibility is set via\nqgisMaximumVersion) and exclude the Sphinx help/make.bat from the package so\nit no longer trips the repository's suspicious-file scan.\n1.0.15 - Fix layer load/rendering error at its root: remove a stray\nsys.path entry that let the plugin modules import under two names, causing a\nModuleNotFoundError in SFFeatureSource. Restores the canonical package folder\nname for the QGIS plugin repository.\n1.0.14 - Packaging change (superseded by 1.0.15).\n1.0.13 - Fix SNOW-3712094 auth-config reuse: load the stored config\nwith full=True so the connection alias is matched and the existing authcfg id\nis reused, instead of leaking a new QGIS auth config on every layer creation.\n1.0.12 - Fix plugin load failure (\"cannot import name\n'QgsSqlExpressionCompiler' from 'qgis.core'\"): reimplement the filter/subset\nexpression compiler as a pure-Python QgsExpression AST walker, since\nQgsSqlExpressionCompiler is not exposed in the PyQGIS bindings. Injection\nprotection and fail-safe fallback behaviour are preserved.\n1.0.11 - Security hardening for QGIS plugin portal scan:\nroute all remaining raw identifier interpolation in helpers/layer_creation.py\nand tasks/sf_connect_task.py through quote_identifier / quote_literal /\nqualified_table_name; validate URL scheme and host before the GitHub update\ncheck in qgis_snowflake_connector.py; replace silent exception swallowing in\nthe feature iterator and export algorithm with QgsMessageLog diagnostics;\nannotate already-sanitized SQL construction sites with documented bandit\nsuppressions. No user-visible behaviour change.\n1.0.10 - Refresh attribute table after edits without reopening the layer;\nadvertise auto-increment default for numeric primary keys via defaultValueClause();\nadd \"Load all rows\" option for tables exceeding the 50,000-row visualization limit.", "external_deps": "", "download_url": "https://plugins.qgis.org/plugins/qgis-snowflake-connector/version/1.0.24/download/"}