DataSQRL/sqrl
66.1
Adequate · 22 September 2026
61.4k
lines of production code
Java
primary language
5
measurements over time
What this system is
This system is a data engineering framework that compiles high-level SQRL scripts into executable data pipelines using Apache Flink. It manages the full lifecycle of data processing, including schema inference, cost-based query optimization, and deployment to various engines like PostgreSQL, Kafka, and Iceberg. The platform provides a CLI for project scaffolding and compilation, alongside a Vert.x-based server that exposes the processed data via GraphQL and REST APIs.
How it got here
2021–2024 — Legacy removal and Flink integration
54 changes.
This period focused on stripping out legacy components, including the custom SQL parser, GraphQL server, and various outdated API modules, to clean the codebase. Concurrently, the project shifted its execution engine to Apache Flink, introducing new interfaces for streaming, logging, and database engines while adding support for Iceberg, Kafka, and DuckDB.
2025 — planner architecture and multi-engine support
82 changes.
The planner underwent a major architectural overhaul, introducing a DAG-based planning system with cost-based optimization and a flexible, visitor-based type system. This period focused on expanding database support by refactoring SQL dialects to enable targets like PostgreSQL, Snowflake, Trino, and Spark, while adding extensive integration tests and CLI scaffolding tools.
2026 — DuckDB expansion and server refactoring
40 changes.
This period focused on expanding DuckDB support through comprehensive function translations, memory configuration, and CTE materialization, alongside significant server-side refactoring for GraphQL pagination and client address logging. The team also introduced new deployment model structures and enhanced PostgreSQL capabilities with pg\_partman and pgvector extensions. Extensive test coverage was added across integration, planner, and server modules to validate these new features and ensure stability.
Features
Add Iceberg data type mapping for JSON and Vector types
Introduces a new IcebergDataTypeMapper that handles specific Flink data types when writing to Iceberg. It explicitly maps Flink's JSON type to a string-only conversion and Vector types to a double-only conversion, while falling back to a byte conversion for other unsupported types.
sqrl-planner/src/main/java/com/datasqrl/datatype/flink/iceberg · high confidence
Add Print export engine for debugging output
A new Print export engine has been introduced, allowing users to configure an export target that prints data to standard output. This feature is implemented via the new PrintEngine class and its corresponding PrintEngineFactory, which registers the 'print' engine type within the export pipeline. The engine integrates with the existing connector configuration system to allow basic customization of the output format.
sqrl-planner/src/main/java/com/datasqrl/engine/export · high confidence
Add initial Postgres log engine implementation
This change introduces the \postgres\_log\ execution engine, providing the core classes (\PostgresLogEngine\, \PostgresLogEngineFactory\, \PostgresLogPhysicalPlan\) and a data type mapper for PostgreSQL as a log destination. The engine is registered via \AutoService\ and includes a \ListenNotifyAssets\ structure for handling database notifications, though the physical planning and table creation methods are currently marked as unsupported, indicating this is a foundational addition rather than a fully functional feature.
sqrl-planner/src/main/java/com/datasqrl/engine/log/postgres · high confidence
Added Flink logo asset and Jekyll build configuration
The documentation site now includes the Apache Flink logo as a static SVG image in the blog assets folder, and a \.nojekyll\ file has been added to the static root to ensure the hosting platform does not process the documentation with Jekyll, preserving the intended static file structure.
documentation/static · high confidence
Added Java UDF templates for scalar and aggregate functions
The CLI now includes new Java template files for user-defined functions, enabling users to create custom scalar and aggregate functions via the \add-func\ command. The scalar template provides a basic \ScalarFunction\ implementation that repeats a string, while the aggregate template offers a time-weighted average \AggregateFunction\ using Flink's API, allowing users to generate these specific function types directly from the command line.
sqrl-cli/src/main/resources/templates/functions · high confidence
Added PostgreSQL JSON function translations
The planner now supports translating a set of internal JSON functions to their PostgreSQL equivalents. This includes aggregations like \jsonb\_agg\ (via \JsonArrayAggSqlTranslation\), construction functions like \jsonb\_build\_array\ and \jsonb\_build\_object\ (via \JsonArraySqlTranslation\ and \JsonObjectSqlTranslation\), and extraction/querying functions like \jsonb\_path\_query\_first\ (via \JsonExtractTranslation\). Additionally, it handles JSON concatenation (\\|\|\), existence checks (\jsonb\_path\_exists\), string conversion (\\#\>\>\), and the casting of typed ROW values to JSONB objects, ensuring these operations work correctly when targeting a PostgreSQL dialect.
sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/json · high confidence
Added Postgres vector function translations and metadata
The planner now supports translation and metadata for several Postgres vector operations. New SQL translation classes handle the \center\, \cosine\_distance\, \cosine\_similarity\, and \euclidean\_distance\ functions, ensuring they are correctly unparsed for the Postgres backend. Additionally, metadata classes define the indexability and operand constraints for \text\_search\, \cosine\_similarity\, and \euclidean\_distance\, enabling the planner to optimize queries involving these vector and text search functions.
sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/vector · high confidence
Added schema compatibility checking and Calcite type utilities
The planner now includes a new TypeCompatibility utility that validates whether a new data schema can safely read data produced by an older schema, ensuring backwards compatibility by checking nullability, structural recursion for rows/arrays/maps, and precision constraints. Additionally, a new TypeFactory component extends Flink's type system to provide standardized methods for creating specific Calcite types (such as timestamps, UUIDs, and integers) and mapping them to Java classes, supporting the underlying type resolution logic.
sqrl-planner/src/main/java/com/datasqrl/calcite/type · high confidence
Automated generation of system and library function documentation
A new script has been added to automatically generate markdown documentation for system and library functions. This tool reads function definitions from YAML source files and produces structured reference pages, ensuring that the documentation for built-in operations and importable library functions remains consistent with the underlying codebase.
documentation/scripts · high confidence
Automatic index optimization and pagination performance improvements
The planner now automatically analyzes query patterns to generate optimal database indexes for JDBC tables, supporting various types such as BTREE, HASH, and partitioned indexes. This includes a specific optimization for paginated queries that automatically adds BTREE indexes on rowtime columns to speed up offset-based pagination. Additionally, the DAG visualization now includes row count estimations for tables to provide better insight into data volume.
sqrl-planner/src/main/java/com/datasqrl/plan/global · high confidence
Configurable DuckDB memory limits and enhanced JSON utilities
The server now supports setting a configurable memory limit for DuckDB via the \memory-limit\ configuration option, allowing users to control resource usage during initialization. Additionally, new utility classes \DuckDbInitializer\ and \JsonUtils\ have been added to the server base module; \DuckDbInitializer\ handles the construction of initialization SQL including extension loading and memory settings, while \JsonUtils\ provides a pre-configured Jackson \ObjectMapper\ with environment variable resolution support and a recursive merge function for JSON nodes.
sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/util · high confidence
Containerized Vert.x server with Prometheus metrics and structured logging
The Vert.x server is now packaged as a container image that launches via a new SqrlLauncher entry point, which automatically registers a Prometheus metrics registry for observability. The container includes a dedicated entrypoint script that supports debug mode via the SQRL\_DEBUG environment variable and writes application logs to the console. Logging is configured with two separate Log4j2 profiles: a standard log4j2.properties for general INFO-level output and a log4j2-debug.properties that enables DEBUG-level logging for the DetailedRequestTracer, routing those detailed request traces to a rotating file at /opt/sqrl/logs/request-trace.log.
sqrl-server/sqrl-server-vertx · high confidence
Expanded DuckDB function translations for arrays, strings, and dates
The planner now includes a comprehensive set of new SQL translation implementations for the DuckDB dialect, covering array operations (ARRAY\_JOIN, ARRAY\_PREPEND, ARRAY\_REMOVE, ELEMENT, ELT), string manipulation (DATE\_FORMAT, LOCATE, ENDS\_WITH, IS\_ALPHA, IS\_DECIMAL, IS\_DIGIT, JSON\_OBJECT, DECODE, ENCODE), and utility functions (CONVERT\_TZ, E). These additions ensure that Flink SQL expressions using these functions are correctly translated into valid DuckDB syntax, improving compatibility and query execution reliability.
sqrl-planner/src/main/java/com/datasqrl/function/translation/duckdb · high confidence
Expanded PostgreSQL function translations for Flink built-ins
The planner now supports a broader set of Flink built-in functions when targeting PostgreSQL, translating operations such as array manipulation (ARRAY\_CONCAT, ARRAY\_CONTAINS, ARRAY\_JOIN, ARRAY\_POSITION, ARRAY\_PREPEND, ARRAY\_REMOVE), string and binary encoding (BIN, DECODE, ENCODE, FROM\_BASE64, HEX), date/time handling (CONVERT\_TZ, CURRENT\_TIME, CURRENT\_TIMESTAMP, DAY\_OF\_WEEK), and utility functions (COLLECT, ELT, ELEMENT, IFNULL, ENDS\_WITH, E). This ensures these functions execute correctly in PostgreSQL-compatible environments.
sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/builtinflink · high confidence
Initial Postgres text search and Snowflake JSON function translation stubs
This change introduces the first stage of database-specific function mapping. For PostgreSQL, it adds a new \TextSearchTranslation\ implementation that converts the platform's text search operator into native Postgres \to\_tsvector\, \to\_tsquery\, and \ts\_rank\_cd\ calls. For Snowflake, it adds a suite of stub translation classes for JSON functions (such as \JsonArrayAgg\, \JsonObject\, and \JsonExtract\). Most of these Snowflake translations are currently disabled (not registered via \@AutoService\) and will throw runtime errors if invoked, serving as placeholders for future implementation.
sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/text, sqrl-planner/src/main/java/com/datasqrl/function/translation/snowflake · high confidence
Introduce DuckDB as a standalone query engine with Iceberg scan optimization
Users can now configure DuckDB as a dedicated query engine to execute SQL queries against Iceberg tables. This change adds a new \DuckDBEngine\ and its factory, along with a \DuckDbStatementFactory\ that implements cost-based optimization for Iceberg scans. The planner automatically materializes repeated scans of large Iceberg tables as Common Table Expressions (CTEs) to improve query performance, while handling Iceberg-specific path resolution and catalog configurations.
sqrl-planner/src/main/java/com/datasqrl/engine/database/relational · high confidence
Introduce FlexibleTableConverter for schema traversal
Added the FlexibleTableConverter class in the flexible schema package, which implements a visitor pattern to traverse and process flexible table schemas. This component handles the conversion of field types, including support for nested relations, array depths, and nullability constraints, enabling the planner to interpret complex schema structures during query planning.
sqrl-planner/src/main/java/com/datasqrl/io/schema/flexible · high confidence
Introduce Flink-based streaming engine implementation
The streaming engine location now provides a concrete Flink implementation, replacing the previous abstract or placeholder structure. This includes the FlinkStreamEngine for runtime configuration and checkpointing, a FlinkEngineFactory registering the engine as type PROCESS, and a suite of SQL planning utilities (FlinkCalciteParser, FlinkSqlNodePlanner, FlinkDialect) to handle SQL parsing, validation, and relational-to-SQL conversion. The package also introduces Calcite optimization rules (ShapeBushyCorrelateJoinRule, ToStubAggRule) to improve query planning and execution for Flink sinks.
sqrl-planner/src/main/java/com/datasqrl/engine/stream · high confidence
Introduce Kafka as a configurable log engine
The planner now supports Kafka as a dedicated log engine, allowing users to configure topic creation parameters such as the number of partitions, replication factor, and retention TTL. This implementation handles both stream and mutation tables, automatically applying upsert formats for state tables with primary keys and supporting configurable watermarks for source and transactional processing.
sqrl-planner/src/main/java/com/datasqrl/engine/log/kafka · high confidence
Introduce new planner utility classes and interfaces
The \sqrl-planner\ module adds a suite of new utility classes and interfaces to support configuration loading, file handling, and service discovery. This includes \MainScript\ and \MainScriptImpl\ for resolving and reading the primary SQRL script and associated mutation database definitions, \ConfigLoaderUtils\ for loading and validating \package.json\ configurations against JSON schemas, and \ServiceLoaderDiscovery\ for caching and retrieving service implementations. Additional utilities such as \AbstractDAG\ for directed acyclic graph operations, \FileUtil\ and \FileCompression\ for file system and compression handling, and \CalciteUtil\ for SQL planner type manipulations are also introduced to centralize common logic.
sqrl-planner/src/main/java/com/datasqrl/util · high confidence
Introduces cost-based query planning for engine selection
The planner now includes a cost analysis module that evaluates the relative expense of executing operations on different engine types (Database, Process, Server, Log). This new capability allows the system to automatically select the most efficient execution strategy by weighing factors such as join complexity, table types (Stream, State, Versioned, Static, Lookup, Relation), and engine-specific penalties, thereby optimizing query performance without manual configuration.
sqrl-planner/src/main/java/com/datasqrl/planner/analyzer/cost · high confidence
Introduces flexible JSON format type mapping for Flink
A new FlexibleJsonFlinkFormatTypeMapper is added to handle data type conversions within the Flink JSON format. This mapper defines specific rules for mapping SQL types to JSON-compatible formats, including handling of arrays, rows, and vector types, ensuring that complex data structures are correctly serialized or converted to bytes when necessary.
sqrl-planner/src/main/java/com/datasqrl/datatype/flink/json · high confidence
Introduction of TableType enum for table classification
A new TableType enum has been added to define and classify table behaviors within the planner, including types such as STREAM, VERSIONED\_STATE, STATE, LOOKUP, RELATION, and STATIC. This enum provides methods to determine specific table properties like whether they have a timestamp, primary key, or support temporal joins, and defines logic for combining different table types.
sqrl-planner/src/main/java/com/datasqrl/io/tables · high confidence
New CLI resources for project initialization and visualization
The CLI now includes support for bootstrapping new projects and visualizing data structures. An \init-project.properties\ file defines default engine configurations (Flink, Kafka, Iceberg, etc.) for stream, dataset, and API components, enabling the \init\ command to scaffold projects with sensible defaults. Additionally, two new HTML resources, \visualize\_dag.html\ and \data\_model\_visual.html\, provide browser-based visualization for deployment graphs and data models respectively, leveraging the \@datasqrl/dag-visualization\ library to render these views in the CLI's Voyager interface.
sqrl-cli/src/main/resources · high confidence
New CLI utility classes and Spring-based dependency injection
The CLI now includes a suite of new utility classes in the \com.datasqrl.util\ package to support core operations: \DirectoryUtils\ for managing target directories, \FileHash\ for computing MD5 checksums, \FlinkOperatorStatusChecker\ for monitoring Flink job states via REST, \JBangRunner\ for building and repairing fat JARs for UDFs, \OsProcessManager\ for dynamically starting dependent services (PostgreSQL, Redpanda) and managing file ownership, \ResourceUtils\ for loading resources from both JARs and the file system, \ResultSetPrinter\ for formatting SQL results, and \SqrlInjector\ which configures Spring-based dependency injection for these components and the broader compilation pipeline.
sqrl-cli/src/main/java/com/datasqrl/util · high confidence
New ExecutionGoal enum for validation phases
A new ExecutionGoal enum has been added to the validation package, defining three distinct phases: COMPILE, RUN, and TEST. This change introduces a structured way to categorize execution goals within the planner's validation logic, likely supporting more granular control over how plans are processed and verified.
sqrl-planner/src/main/java/com/datasqrl/plan/validate · high confidence
New Flink type mapping infrastructure for JSON, vectors, and bytes
The planner now includes a new \DataTypeMapping\ interface and \DataTypeMappings\ registry to handle conversions between Flink types and database engine types. This change introduces specific mappers for JSON (using \jsonb\_to\_string\ and \to\_jsonb\), vector data (using \vector\_to\_double\ and \double\_to\_vector\), and byte serialization (\serialize\_to\_bytes\), enabling more precise type handling for these data structures during query execution.
sqrl-planner/src/main/java/com/datasqrl/datatype · high confidence
New Jackson serialization module with automatic plugin discovery
The planner now includes a new serialization infrastructure in the \com.datasqrl.serializer\ package. A central \Deserializer\ class provides unified JSON and YAML mapping capabilities using Jackson, configured with specific modules for Java 8, Java Time, and Vert.x. The system introduces a \SqrlSerializerModule\ that automatically discovers and registers custom serializers and deserializers via Java's \ServiceLoader\. This enables extensible serialization, demonstrated by the inclusion of \NewTopicSerializer\ and \NewTopicDeserializer\ for Kafka topic configurations, and a generic \JacksonDeserializer\ for polymorphic type resolution based on a type key.
sqrl-planner/src/main/java/com/datasqrl/serializer · high confidence
New SQRL project scaffolding via the \`init\` command
The \sqrl-cli\ now includes an \init\ command that generates a complete starter project structure, including a \.gitignore\, production and test package configuration files (\\_\projectname\\-prod-package.json.mustache\, \\\projectname\\-test-package.json.mustache\), a main SQRL script (\\\projectname\\_.sqrl\) with a basic transformation, and connector definitions for both production and test environments. The generated project also includes sample test data (\connectors/test-data/messages.jsonl\) and a pre-computed test snapshot (\snapshots/HelloWorldTest.snapshot\) to facilitate immediate testing of the generated pipeline.
sqrl-cli/src/main/resources/templates/init-project · high confidence
New and improved planner hints for caching, indexing, and documentation
The planner now supports several new hints to fine-tune query execution and data management. Users can define caching behavior with the \cache\ hint (specifying a TTL duration) and manage data retention with the \ttl\ hint. Indexing is more flexible, allowing explicit \index\ hints with specified types and sort orders (ASC/DESC), as well as \vector\_dim\ hints for vector column indexing. Table access patterns are controlled via \query\_by\_all\, \query\_by\_any\, and \no\_query\ hints. Additional hints include \engine\ (replacing the legacy \exec\ hint) for DAG stage assignment, \row\_count\ for cardinality estimation, \mutation\_insert\ for specifying mutation types, \maintenance\ for regular maintenance flags, and \workload\ to mark tables as query-only sources. The system also introduces \DocStringParser\ to extract column and argument documentation from Rust-style markdown comments, and \PartitionKeyHint\ to assign partition keys. Unknown hints now generate warnings instead of fatal errors, improving robustness during planning.
sqrl-planner/src/main/java/com/datasqrl/planner/hint · high confidence
New blog posts covering DataSQRL releases, Flink SQL extensions, and automation concepts
Added seven new documentation/blog posts detailing the DataSQRL 0.6 and 0.7 releases, Flink SQL extensions for defining data interfaces, the Flink SQL Runner toolkit, and the conceptual framework for data platform automation. These posts explain how DataSQRL compiles SQRL scripts into data pipelines, supports temporal joins, and provides a world model for AI coding agents.
documentation/blog · high confidence
New extensible file readers and statistics-driven schema inference for CSV and JSONL
The discovery module now supports automatic schema inference for CSV and JSONL data files. New \CSVRecordReader\ and \JsonlRecordReader\ implementations (registered via \@AutoService\) parse these formats, while \AbstractDiscoveryTableSchemaFactory\ orchestrates the process by reading file records, computing field-level statistics (counts, nulls, types, array depths), and merging them into a \FlexibleTableSchema\ via \DefaultSchemaGenerator\. This replaces previous static schema approaches with a dynamic, statistics-based discovery process that adapts to the actual data content.
sqrl-discovery/src · high confidence
New flexible schema type converters for Calcite integration
Added two new converter classes, FlexibleTable2RelDataTypeConverter and SqrlTypeRelDataTypeConverter, within the flexible schema converters package. These components enable the mapping between the system's internal flexible schema types (such as Boolean, BigInt, String, Timestamp, Interval, and Array) and Apache Calcite's RelDataType structures, allowing the planner to correctly interpret and process flexible schema definitions during query execution.
sqrl-planner/src/main/java/com/datasqrl/io/schema/flexible/converters · high confidence
New internal function metadata and PostgreSQL operator support
This change introduces new internal infrastructure for handling function metadata and adds support for specific PostgreSQL operators. It adds a new \FunctionMetadata\ interface (replacing a previously renamed exception file) and several new interfaces (\IndexableFunction\, \InputPreservingFunction\) to classify functions for optimization and primary-key/timestamp determination. It also introduces \PgSpecificOperatorTable\, which defines SQL operators for PostgreSQL full-text search (e.g., \to\_tsvector\, \@@\) and distance metrics (cosine, Euclidean), along with utility classes (\CalciteFunctionUtil\, \FlinkUdfNsObject\) to support these function definitions within the planner.
sqrl-planner/src/main/java/com/datasqrl/function · high confidence
New planner utility classes for index mapping and primary key management
The planner now includes new utility classes in the \com.datasqrl.plan.util\ package to handle column index mapping and primary key tracking. \IndexMap\ and its implementation \SelectIndexMap\ provide a functional interface for remapping column indices, including a \RexIndexMapShuttle\ to update Calcite \RexNode\ references during plan transformations. \PrimaryKeyMap\ manages primary key column sets, supporting operations to check coverage, simplify keys, and remap indices. Additionally, \RelWriterWithHints\ extends Calcite's \RelWriterImpl\ to include query hints in the relational node explanation output, improving debuggability.
sqrl-planner/src/main/java/com/datasqrl/plan/util · high confidence
Repository initialization with documentation, licensing, and build infrastructure
This change establishes the project's foundational structure by adding essential documentation files (CLAUDE.md, CONTRIBUTING.md, RELEASE.md, README.md), the Apache 2.0 license, and configuration files (codecov.yml, .gitignore). It also introduces Dockerfiles for DuckDB extensions and the MCP Inspector, updates the .gitmodules to point the stdlib-docs submodule to the flink-sql-runner repository, and removes the old sqml-examples submodule.
(repo-wide) · high confidence
Support bare relation aliases in SELECT lists
The planner now allows selecting a table alias directly in the SELECT clause (e.g., \SELECT p FROM Projects p\). Instead of requiring explicit column listing, the system automatically expands the bare alias into a nested ROW value containing all columns of the referenced relation, enabling users to treat an entire row as a single field in the result set.
sqrl-planner/src/main/java/com/datasqrl/calcite/expand · high confidence
Support for pg\_partman partitioning and pgvector extension
The planner now automatically generates SQL to configure the pg\_partman extension for tables using RANGE partitioning with a Time-To-Live (TTL), including configurable premake counts and historical start partitions. Additionally, it now supports the pgvector extension, enabling vector data types and associated operators for similarity search capabilities.
sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/extensions · high confidence
Removals
Removal of Postgres-specific migration and optimization components
The Postgres-specific implementation details have been removed from the sqml-postgres module. This includes the deletion of the PostgresResult class and its associated MigrationObject structure, the PostgresFunctions registry, the PostgresSqmlMigration executor, the ShreddingSqlOptimizer, the PostgresStatisticsProvider, and the commented-out Rewriter logic. Users relying on this module for Postgres schema migration or Postgres-specific SQL optimization will no longer have access to these capabilities in this location.
sqml-postgres · high confidence
Removal of incomplete GraphQL schema builder components
The \GraphqlSchemaBuilder\ and \SqlGraphqlSchema\ classes in the \sqml-graphql\ module have been removed. These files contained stub implementations for converting SQL logical plans into GraphQL schemas, including a visitor pattern for traversal and basic type mapping logic that was not fully functional. This cleanup eliminates unused code from the codebase.
sqml-graphql/src/main/java · high confidence
Removal of legacy HTTP source ingress
The \HttpIngress\ class, which previously allowed users to ingest data streams from HTTP URLs via a buffered reader and asynchronous timeout handling, has been removed from the \sqml-ingress-http\ module. This change eliminates the legacy URL-based source capability from the HTTP ingress component.
sqml-ingress-http · high confidence
Removal of legacy Main.java entry point
The legacy \Main.java\ entry point in \sqml-main/src/main/java\ has been removed. This file previously contained the hardcoded application startup logic, including the definition of a \meetup\ data source, schema configuration, Postgres migration setup, and the initialization of the GraphQL servlet on port 8080. Its deletion indicates a shift away from this specific monolithic startup pattern, likely as part of the broader refactoring and integration of Flink into the pipeline.
sqml-main/src/main/java · high confidence
Removal of legacy SQL grammar definition
The legacy SQL grammar file (SqlBase.g4) has been deleted from the parser module. This change removes the previously defined syntax rules for statements, queries, joins, and expressions, indicating that the parser implementation has been replaced or significantly restructured in other parts of the codebase.
sqml-parser/src/main/antlr4 · high confidence
Removal of legacy SQL query analysis and model components
The \sqml-core\ module has removed a significant set of internal classes responsible for SQL query analysis and model representation, including \MetadataManager\, \Model\, \ModelRelation\, \QueryUtil\, \Session\, \StubModel\, \StubModels\, and the entire \analyzer\ package (containing \Analyzer\, \Analysis\, \AggregationAnalyzer\, \ExpressionAnalyzer\, and related utilities). This change eliminates the legacy code paths for parsing, analyzing, and managing SQL query plans and metadata within this core library.
sqml-core · high confidence
Removal of legacy SQML API components
The \sqml-api\ module has removed a large set of legacy classes, including the analyzer, optimizer, execution strategies, schema definitions, and vertex infrastructure. This cleanup eliminates unused code and simplifies the API surface by discarding the previous implementation of script analysis, query optimization, and local execution logic.
sqml-api · high confidence
Removal of local script registry implementation
The LocalScriptRegistry class, which previously allowed users to register and retrieve scripts from a local in-memory map, has been removed from the codebase. This change eliminates the ability to use this specific local-only script storage mechanism.
sqml-script-registry-local · high confidence
Removal of presto-matching library and sqml-server components
This change removes the \presto-matching\ library entirely, deleting core classes such as \Pattern\, \Matcher\, \Match\, and \Captures\ along with their associated pattern implementations (e.g., \TypeOfPattern\, \WithPattern\). It also removes the \sqml-server\ module, deleting the GraphQL endpoint implementation (\GraphqlEndpoint\), server orchestration (\SqmlServer\), and various management and handler classes (e.g., \ScriptManager\, \SchemaManager\). Additionally, the \sqml-metadata\ module is stripped of its \ColumnType\, \Identifier\, and \MetadataStore\ definitions.
presto-matching, sqml-metadata, sqml-server · high confidence
Removal of unused PostgresViewVertexFactory class
The unused PostgresViewVertexFactory class has been removed from the sqml-postgres-view module. This cleanup eliminates dead code that previously provided a factory method for creating SqlVertexFactory instances, simplifying the codebase without affecting active functionality.
sqml-postgres-view · high confidence
Removed GraphqlServlet stub
The GraphqlServlet class, which served as a stub for a GraphQL endpoint in the sqml-graphql-jetty module, has been removed. This eliminates the unused servlet infrastructure that previously exposed a builder pattern for configuring the GraphQL runtime and schema.
sqml-graphql-jetty · high confidence
Removed meetup.sqml resource file
The sample resource file meetup.sqml has been removed from the application resources. This file previously defined a data source import for 'meetup' and contained specific field calculations for Rsvp records, including a derived id\_mult field and a sum\_id aggregation.
sqml-main/src/main/resources · high confidence
SQML parser implementation removed
The entire \sqml-parser\ implementation has been deleted, including the \SqlParser\, \SqmlParser\, \AstBuilder\, and all associated support classes (e.g., \ErrorHandler\, \ParsingOptions\). This removes the capability to parse and analyze SQML scripts and SQL statements within this module.
sqml-parser/src/main/java/ai/dataeng/sqml/parser · high confidence
SQML parser tree model removed
The entire AST node hierarchy and visitor infrastructure in the \sqml-parser\ tree package has been deleted. This includes all node classes (such as \AliasedRelation\, \ArithmeticBinaryExpression\, \Cast\, and \Query\), the \AstVisitor\ interface, and the default traversal implementations. This change removes the parser's internal representation of SQL queries and expressions, likely as part of a migration to a different parsing or analysis engine.
sqml-parser/src/main/java/ai/dataeng/sqml/tree · high confidence
Architecture
Refactor SQL statement interfaces and introduce database extension points
The SQL planning layer has been restructured to support database-specific extensions and cleaner statement definitions. Two new service-loader interfaces, DatabaseTableExtension and DatabaseTypeExtension, have been added to allow plugins to inject custom DDL and manage database-specific type operators. Additionally, the SqlFunction interface has been renamed and relocated to SqlDDLStatement within the new package, simplifying its contract to a single getSql method to better reflect its role in generating DDL statements.
sqrl-planner/src/main/java/com/datasqrl/sql · high confidence
Refactor planner analyzer into dedicated analysis classes
The planner's analysis logic in the \analyzer\ package has been restructured into a set of focused classes: \AbstractAnalysis\ provides common relational node utilities, \CapabilityAnalysis\ tracks required engine features, \RelNodeAnalysis\ holds intermediate state, and \TableAnalysis\ aggregates table metadata. This refactoring consolidates the analysis components previously scattered or managed by \TypeManager\, improving the clarity and maintainability of the planning pipeline.
sqrl-planner/src/main/java/com/datasqrl/planner/analyzer · high confidence
Refactor server module and key interfaces for flexibility
The server module and its core interfaces have been refactored to be more flexible and decoupled. This introduces a new thread-safe \GlobalEnvironmentStore\ for centralized environment variable access, standardizes environment variable naming via \EnvVariableNames\, and restructures the GraphQL execution layer with new interfaces like \FunctionExecutor\, \MetadataReader\, and \ServerContext\. Additionally, the \GraphQLEngineBuilder\ and \RootGraphQLModel\ have been updated to support these new abstractions, and custom scalars (such as \DOUBLE\ and \FLEXIBLE\_DATETIME\) are now explicitly registered in the GraphQL wiring.
sqrl-server/sqrl-server-core · high confidence
Behavioural changes
Avro schema parsing now respects legacy timestamp mapping configuration
The Avro schema factory and converter now explicitly handle the Avro legacy timestamp mapping setting. When processing Avro schemas, the system checks for a specific configuration property (including prefixed variants) and automatically enables legacy timestamp mapping if the 'avro-confluent' format is detected. This ensures that timestamp fields are converted correctly according to the expected Avro format, preventing potential data type mismatches during schema inference.
sqrl-planner/src/main/java/com/datasqrl/io/schema/avro · high confidence
CLI restructured with Spring DI and new project scaffolding commands
The CLI command architecture has been refactored to use Spring Boot for dependency injection, replacing the previous Guice-based setup. This change introduces a new command hierarchy (BaseCmd, BaseOsProcessManagerCmd, AbstractCompileCmd) and adds two new user-facing commands: 'init' to scaffold new SQRL projects from templates, and 'add-func' to generate Java UDF stubs. The refactoring also standardizes error handling via a unified ErrorCollector and improves output formatting for compile and test operations.
sqrl-cli/src/main/java/com/datasqrl/cli · high confidence
Configured IOExceptionHandler for error processing
The application now registers com.datasqrl.error.IOExceptionHandler as the implementation for the com.datasqrl.error.ErrorHandler service interface via the standard Java SPI mechanism. This ensures that I/O-related errors are handled by this specific component.
sqrl-planner/src/main/resources/META-INF · high confidence
Custom PlannerModule for SQRL Docker image classloading
The SQRL \cmd\ Docker image now uses a custom \PlannerModule\ to initialize the Flink SQL planner correctly within a single-JVM process. This change overrides the standard Flink classloading behavior to prevent \ClassNotFoundException\ errors when \flink-table-planner.jar\ is not present on the classpath, ensuring the planner initializes properly in the containerized environment without affecting real Flink SQL runner deployments.
sqrl-planner/src/main/java/org/apache/flink · high confidence
Custom SQL generation for Flink execution
The planner now uses custom Calcite SQL converters to generate Flink-compatible SQL, addressing specific execution requirements. This includes rewriting correlated joins with snapshots into temporal joins, handling UNNEST operations as lateral joins, and preserving join types during conversion. The new converters also inject execution hints into SELECT statements, simplify table references by stripping catalog/database prefixes, and ensure SELECT lists are correctly populated to avoid parser quirks.
sqrl-planner/src/main/java/org/apache/calcite · high confidence
Documentation site restructured and configured for Docusaurus 3.7.0
The documentation website has been reorganized and configured using Docusaurus 3.7.0, deployed at https://docs.datasqrl.com. The new structure includes a comprehensive sidebar with sections for Core Concepts, Configuration (covering Flink, Kafka, Vert.x, PostgreSQL, and Iceberg engines), Functions, and How-To guides. The site now features a local search plugin, Mermaid diagram support, and a custom dark/light theme with specific color palettes. Deployment is handled via CI/CD to GitHub Pages, and the site requires Node.js 22+ and a git submodule for standard library documentation.
documentation · high confidence
Expanded SQL dialect support and refactored function translation
The planner now supports generating SQL for Trino, Redshift, and Spark SQL in addition to existing dialects, as indicated by the new entries in the Dialect enum. To facilitate this, the codebase has been refactored to separate function translation into two mechanisms: structural transformations applied at the RelNode level via the new OperatorRuleTransformer and OperatorRuleTransform interface, and simpler name/argument adjustments handled via SqlTranslation during unparsing. Supporting infrastructure includes the DynamicParamSqlPrettyWriter for tracking dynamic parameters and SqrlRexUtil for improved join condition decomposition.
sqrl-planner/src/main/java/com/datasqrl/calcite · high confidence
Improved Flink INSERT conflict handling and configurable predicate pushdown rules
The planner now automatically resolves Flink INSERT conflict clauses (ON CONFLICT) for upsert sinks by analyzing the optimized plan, reducing the need for manual configuration and preventing non-deterministic results. Additionally, users can now tune the Flink optimizer's predicate pushdown behavior via the new \LIMITED\_RULES\ and \LIMITED\_RULES\_NO\_SOURCE\ configuration options, which strip specific filter and table-source rules to improve subgraph reuse and query performance.
sqrl-planner/src/main/java/com/datasqrl/planner · high confidence
Improved query optimization with accurate row count and join cost estimation
The planner now uses custom metadata handlers to provide more accurate statistics for query optimization. Row count estimates for table scans are derived from table analysis (primary keys and row count hints), and join cost models now include nested loop joins alongside hash joins, ensuring better plan selection for non-equi-join conditions. Selectivity and column uniqueness estimates are also enhanced to leverage primary key information, leading to more efficient query execution plans.
sqrl-planner/src/main/java/com/datasqrl/plan/rules · high confidence
Introduce flexible schema input model with constraint system
The flexible input schema package now defines a new type-safe model for schema definitions, including \FlexibleFieldSchema\, \FlexibleTableSchema\, and \RelationType\, which replace the previous \VarcharType\ and \AbstractType\ classes. This change introduces a new constraint system (\Constraint\, \NotNull\, \Cardinality\, \Unique\) to validate field properties, and adds \FlexibleTypeMatcher\ and \TypeSignatureUtil\ to handle automatic type detection and matching against flexible schema definitions.
sqrl-planner/src/main/java/com/datasqrl/io/schema/flexible/input · high confidence
Introduce generic Java server engine and Vert.x implementation
The server engine module now uses a new \GenericJavaServerEngine\ base class and a \VertxEngineFactory\ to manage server-side execution. This change introduces a Jackson-based configuration system (replacing the previous Vert.x \JsonObject\ approach) that merges default templates with package-specific engine configs to produce a \server-config.json\ deployment artifact. The \ServerPhysicalPlan\ now explicitly tracks server functions, mutations, and the merged \ServerConfig\, while a custom \PrettyPrinter\ ensures the generated configuration is human-readable.
sqrl-planner/src/main/java/com/datasqrl/engine/server · high confidence
Introduces engine capability model and refactored execution interfaces
The engine package now defines a structured capability model via the \EngineFeature\ enum, allowing the planner to verify support for specific operations such as mutations, temporal joins, and partitioning before generating physical plans. This is supported by new interfaces including \EngineConfiguration\ for engine initialization, \ExecutionEngine\ for capability checks, and \EnginePhysicalPlan\ for serializable deployment artifacts. Additionally, legacy interfaces like \FunctionHandle\ and \ParametricType\ have been renamed and repurposed to \ExecutableQuery\ and \IExecutionEngine\ respectively, aligning the internal API with the new execution stage and engine type abstractions.
sqrl-planner/src/main/java/com/datasqrl/engine · high confidence
Introduction of LogEngine and MutationEngine interfaces for mutation support
The planner now exposes new interfaces in the \com.datasqrl.engine.log\ package to handle mutation operations. \LogEngine\ serves as a composite interface extending \ExportEngine\, \MutationEngine\, and \DatabaseEngine\, replacing the previous \TimeWithTimeZoneType\ class which has been removed. \MutationEngine\ defines the contract for creating mutation tables, including support for specifying an insertion type and a Time-To-Live (TTL) duration, enabling the engine to manage data mutations with configurable expiration policies.
sqrl-planner/src/main/java/com/datasqrl/engine/log · high confidence
JVM configuration added for code formatting plugins
A new .mvn/jvm.config file has been introduced to configure the JVM with specific --add-opens and --add-exports flags for the jdk.compiler module. This change enables internal access required by code formatting plugins to operate correctly during the build process.
.mvn · high confidence
New DAG-based planning architecture for SQRL pipelines
The planner now constructs a Directed Acyclic Graph (DAG) of table and function definitions to optimize and assemble physical execution plans. This change introduces a new \DAGBuilder\ to track node dependencies, a \PipelineDAG\ structure to manage execution stages and eliminate inviable paths, and a \DAGPlanner\ that assigns nodes to the most cost-effective stages (such as PROCESS or data store engines) before generating the final physical plan. This replaces the previous linear planning approach with a graph-based optimization layer.
sqrl-planner/src/main/java/com/datasqrl/planner/dag · high confidence
New PostgreSQL data type mapping for Flink JDBC connector
A new FlinkSqrlPostgresDataTypeMapper has been introduced to handle PostgreSQL data types within the Flink JDBC connector. This mapper defines specific conversion rules: standard scalar types (such as integers, decimals, dates, and strings) are passed through without modification, while complex types like MAP, ROW, and ARRAY are converted to JSON. Additionally, any other types that do not match the specific Flink JSON or Vector types are cast to bytes, ensuring consistent handling of diverse PostgreSQL data structures in the planner.
sqrl-planner/src/main/java/com/datasqrl/datatype/flink/jdbc · high confidence
New compilation pipeline with test planning and API artifact generation
The compile module now uses a new \CompilationProcess\ orchestrator that generates OpenAPI JSON deployment artifacts for each API version and writes visual data-model HTML files. It also introduces a test-planning phase that builds a \TestPlan\ containing GraphQL queries, mutations, and subscriptions, allowing the test runner to use a custom GraphQL schema and respect \test(no\_rows)\ hints to skip snapshot generation for empty test queries.
sqrl-cli/src/main/java/com/datasqrl/compile · high confidence
New deployment model classes for Flink, JDBC, Kafka, and database mutations
The sqrl-deployment-model module now includes new Java record classes that define the structure of deployment configuration files. These models represent the contents of Flink plans (FlinkPlanModel), JDBC database plans (JdbcPlanModel, JdbcStatementModel), Kafka topic definitions (KafkaPlanModel, KafkaNewTopicModel), and pipeline mutation database configurations (MutationDatabaseModel). This refactoring centralizes the data structures used to parse and validate deployment file formats.
sqrl-deployment-model · high confidence
New structured error handling and reporting infrastructure
The \sqrl-planner\ now uses a dedicated error-handling package (\com.datasqrl.error\) to provide structured, user-friendly error messages. This change introduces a system where errors are collected via \ErrorCollector\ and \ErrorCatcher\, which route exceptions through specific \ErrorHandler\ implementations (such as the new \IOExceptionHandler\) to produce consistent \ErrorMessage\ objects with severity levels (FATAL, WARN, NOTICE) and precise file locations. The \ErrorPrinter\ generates pretty-printed output that includes code snippets and context descriptions, while \CollectedException\ ensures stack traces are trimmed to highlight the root cause rather than internal framework noise.
sqrl-planner/src/main/java/com/datasqrl/error · high confidence
New table planning infrastructure and visibility controls
The planner now introduces a dedicated \AccessVisibility\ record to control whether table functions are exposed as queryable endpoints, subscriptions, or kept internal, alongside a \FlinkConnectorConfigWrapper\ that maps Flink connector types (such as \kafka\, \iceberg\, and \jdbc\) to internal table types like \STREAM\ or \VERSIONED\_STATE\. A new \FlinkTableBuilder\ simplifies the construction of Flink table definitions by handling column lists, watermark settings, and partition keys, while \SqrlTableFunction\ and \SqrlFunctionParameter\ provide the core representation for user-defined functions with support for parameters, documentation, and caching durations.
sqrl-planner/src/main/java/com/datasqrl/planner/tables · high confidence
Rationalized SQL dialect conversion and added new shallow query engine support
The SQL conversion logic in the planner has been refactored to simplify the addition of new dialects, introducing a unified \AbstractSqlConverters\ base class and a \SqlConvertersFactory\ that discovers implementations via \@AutoService\. This structural change enables the addition of several new shallow query engines: Trino, Redshift, and Spark SQL. The diff also includes new Calcite transformation rules (\SimpleCallTransform\ and \SimplePredicateTransform\) to assist with SQL rewriting, and updates the DuckDB converter to handle nested \TIMESTAMPDIFF\ rewrites.
sqrl-planner/src/main/java/com/datasqrl/calcite/convert · high confidence
Redesigned documentation site with new landing pages and reusable components
The documentation website has been revamped to feature dedicated landing pages for the main product, AI capabilities, and Flink integration, alongside a new Community page. This update introduces reusable React components for the homepage header and feature lists, allowing for consistent styling and easier content management across the new pages. The main index page now highlights the 'Agentic Data Engineering Harness' positioning with updated messaging, code examples, and architectural diagrams, while the AI and Flink pages showcase specific use cases and technical benefits. The community page directs users to GitHub discussions and other support channels.
documentation/src/pages · high confidence
Redesigned sqrl-cli container with updated dependencies and improved workspace handling
The sqrl-cli Docker image has been rebuilt from a new base structure, upgrading JBang to version 0.141.0 and PostgreSQL to version 18. The container now includes Redpanda and pre-installed DuckDB extensions, and supports S3A IRSA credentials via a new core-site.xml configuration. For users, the entrypoint script now enforces the /workspace mount point (deprecating /build) and ensures file ownership matches the host directory, while PostgreSQL is configured to listen on all addresses to allow external connections.
sqrl-cli · high confidence
Refactor configuration loading to use Spring-managed interfaces
The configuration loading logic in the planner has been refactored to replace the previous implementation with a new set of Spring-managed components and interfaces. This change introduces specific implementation classes such as \CompilerApiConfigImpl\, \ConnectorConfImpl\, and \EngineConfigImpl\ to handle compiler, connector, and engine settings respectively. It also adds a \CompilerApiConfigConverter\ to map API configurations and a \GraphqlSourceLoader\ to manage GraphQL schema loading and inference. For users, this represents a structural update to how the system reads and validates configuration files, ensuring that configuration objects are properly instantiated and managed by the Spring context.
sqrl-planner/src/main/java/com/datasqrl/config · high confidence
Refactored SQL dialect architecture with new base classes and extended dialects
The SQL dialect implementation has been restructured to simplify the addition of new database targets. A new \BasePostgresSqlDialect\ abstract class centralizes unparse logic and translation dispatching, which is now handled by a \SqlTranslationDispatcher\ that leverages service-loaded \SqlTranslation\ plugins. This foundation supports new or updated dialect implementations: \ExtendedPostgresSqlDialect\ now explicitly maps types (e.g., avoiding JSONB casts for arrays, mapping Flink types to PostgreSQL equivalents) and enforces PostgreSQL-specific SQL conformance rules; \DuckDbSqlDialect\ is introduced as a standalone dialect extending the base; \ExtendedSparkSqlDialect\ and \ExtendedTrinoSqlDialect\ provide specialized type casting and SQL rendering (e.g., handling \SUBSTRING\ vs \SUBSTR\, \APPROX\_COUNT\_DISTINCT\); and \ExtendedSnowflakeSqlDialect\ supports Snowflake-specific operations including \CREATE ICEBERG TABLE\ from object storage. This change improves modularity and ensures accurate SQL generation across PostgreSQL, DuckDB, Spark, Trino, and Snowflake targets.
sqrl-planner/src/main/java/com/datasqrl/calcite/dialect · high confidence
Refactored SQL parser infrastructure with improved error location tracking and comment handling
The parser module has been restructured to improve how SQRL scripts are split, parsed, and how errors are reported. A new \SqlScriptStatementSplitter\ now handles script splitting, correctly ignoring statement delimiters inside string literals and preserving block comments while filtering line comments. Error reporting is enhanced via \ParsePosUtil\ and \SqlParserExceptionHandler\, which map Flink/Calcite parser exceptions to precise file locations and clean up error messages. New core types like \ParsedObject\ and \SqrlComments\ track source positions and separate documentation from hints, ensuring that error locations remain accurate even when definitions are transformed or stacked.
sqrl-planner/src/main/java/com/datasqrl/planner/parser · high confidence
Refactored canonicalizer to use a new Name abstraction
The canonicalizer module has been restructured to introduce a new \Name\ interface that distinguishes between a canonical representation (used for internal comparison and equality) and a display representation (preserving the user's original input). This change replaces the previous implementation with new classes such as \AbstractPath\, \NamePath\, \StandardName\, and specific canonicalizers like \LowercaseEnglishCanonicalizer\ and \IdentityCanonicalizer\, allowing for more flexible handling of field names during script parsing and data ingestion.
sqrl-planner/src/main/java/com/datasqrl/canonicalizer · high confidence
Refactored database engine planning model with new interfaces and combined plan support
The database engine planning model has been restructured to introduce distinct interfaces for database and query engines, allowing for clearer separation of concerns between data persistence and query execution. New interfaces such as DatabaseEngine, QueryEngine, and AnalyticDatabaseEngine define the capabilities and relationships between these components, while CombinedEnginePlan enables the aggregation of multiple engine plans into a single deployment artifact. This change also includes the introduction of DatabaseEngineFactory to standardize engine creation and DatabasePhysicalPlan to represent the output of database-specific planning stages.
sqrl-planner/src/main/java/com/datasqrl/engine/database · high confidence
Refactored execution pipeline to support multiple database engines and shallow query validation
The execution pipeline has been refactored to support multiple database engines and introduce a new shallow query engine type. The \SimplePipeline\ now explicitly manages stages for LOG, PROCESS (formerly STREAMS), DATABASE, SERVER, and EXPORT engines, allowing for more flexible engine configurations. A key behavioral change is the addition of validation logic: when a SERVER engine is enabled with a JDBC table format database, the system now enforces that a standard query engine is present, rejecting configurations that rely solely on shallow query engines which are not integrated at the database level. This ensures that server-side queries are processed by engines capable of handling the required database interactions.
sqrl-planner/src/main/java/com/datasqrl/engine/pipeline · high confidence
Refactored flexible type system with visitor pattern and new basic types
The flexible type system in the planner has been restructured to support a visitor-based architecture and a new set of basic data types. A new \SqrlTypeVisitor\ interface and \Type\ base interface have been introduced, allowing types to be processed via the visitor pattern. The system now includes dedicated classes for basic types such as \BigIntType\, \BooleanType\, \DoubleType\, \IntervalType\, \ObjectType\, \StringType\, and \TimestampType\, each implementing specific conversion logic and type distance calculations. A \BasicTypeManager\ centralizes type registration, name lookup, and combination logic. Legacy classes like \DecimalParseResult\ and \LikePatternType\ have been replaced or renamed to \ArrayType\ and \Type\ respectively, aligning with the new package structure \com.datasqrl.io.schema.flexible.type\.
sqrl-planner/src/main/java/com/datasqrl/io/schema/flexible/type · high confidence
Refactored module and function loading infrastructure
The \sqrl-planner\ module's loader subsystem has been restructured to support individual table imports and exports. This introduces a new \ClasspathFunctionLoader\ to discover standard library functions via Java's \ServiceLoader\, a \ModuleLoaderImpl\ that caches and resolves modules from both the file system and classpath, and a \ScriptSqrlModule\ that lazily initializes \CREATE TABLE\ statements for granular access. The refactoring also adds a \UdfJarClassLoaders\ component to manage user-defined function JARs and ensures these classloaders are properly closed after compilation to prevent resource leaks.
sqrl-planner/src/main/java/com/datasqrl/loaders · high confidence
Refactored packaging pipeline with file preprocessing and improved error diagnostics
The packager module has been restructured to introduce a dedicated FilePreprocessingPipeline component that handles copying relevant source files (SQL, GraphQL, config, schema) into the build directory and executing registered preprocessors. The main Packager component now orchestrates this preprocessing, including support for included sub-projects, and explicitly cleans the default Iceberg warehouse directory before building. Additionally, if Flink compilation fails, the system now writes out the Directed Acyclic Graph (DAG) and the generated SQL to log files in the build directory to aid in debugging.
sqrl-cli/src/main/java/com/datasqrl/packager · high confidence
Refactored preprocessing pipeline with new static data and JBang UDF handlers
The preprocessing logic in the CLI packager has been restructured into a modular pipeline of Spring-managed components. A new CopyStaticDataPreprocessor now automatically handles .jsonl, .avro, and .csv files, specifically stripping header rows from CSVs to ensure Flink compatibility. JBang-based Java UDFs are now processed by a dedicated JBangPreprocessor that exports fat JARs with class-path support and caches builds for performance. Existing JAR UDFs are handled by a JarPreprocessor, while SqrlPreprocessor manages script templating via Mustache. All UDF manifest generation is centralized in a new UdfManifestPreprocessor base class, and the Preprocessor interface standardizes the processing contract.
sqrl-cli/src/main/java/com/datasqrl/packager/preprocess · high confidence
Refactored schema loading and conversion infrastructure
The schema loading and conversion logic in the planner has been refactored to use a new, extensible architecture. A new \SchemaLoader\ interface and its \SchemaLoaderImpl\ implementation now handle locating schema files via a \ResourceResolver\ and delegating conversion to pluggable \TableSchemaFactory\ instances discovered via ServiceLoader. This is supported by new \SchemaConversionResult\ and \SqrlTypeConverter\ types to standardize the output and conversion process, replacing the previous monolithic schema handling with a modular, factory-based approach.
sqrl-planner/src/main/java/com/datasqrl/io/schema, sqrl-planner/src/main/java/com/datasqrl/loaders/schema · medium confidence
Refactored server module with new GraphQL schema generation and pagination support
The server module has been restructured to introduce new core classes for managing API sources and generating GraphQL schemas, including \ApiSource\, \ApiSources\, \GraphqlSchemaFactory\, and \GraphqlSchemaHandler\. This refactoring enables opt-in offset-based pagination for GraphQL queries via the \OffsetPageInfo\ metadata type, allowing paginated results to include pagination details like page size and total records. Additionally, the module now supports generating and serving OpenAPI deployment artifacts, with validation against existing specifications to ensure backward compatibility.
sqrl-planner/src/main/java/com/datasqrl/server · high confidence
Server logging now includes forwarded client addresses
The server now resolves and logs the actual client IP address from the X-Forwarded-For header in access logs and detailed request traces, rather than only logging the immediate connection address. This ensures accurate client identification when the server is behind a proxy or load balancer.
sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server · high confidence
Standardized default configuration and logging resources
The planner now ships with a standardized set of default configuration files to simplify setup and ensure consistent behavior. A new \default-package.json\ defines baseline settings for enabled engines (Vert.x, Postgres, Kafka, Flink), compiler options (including the new \LIMITED\_RULES\_NO\_SOURCE\ predicate pushdown rules and API pagination defaults), and connector properties (such as Kafka compression and Iceberg warehouse paths). Run-specific Flink execution details (like checkpointing and local target settings) have been moved to \default-run-package.json\. Additionally, a \log4j2.properties\ file standardizes logging to INFO level on the console, and \saffron.properties\ sets Calcite defaults, while a sample GraphQL schema (\c360-small.graphqls\) is provided for reference.
sqrl-planner/src/main/resources · high confidence
Test coverage
Added GraphQL schema test fixtures for the planner converter; Added JUnit 4 compatibility stubs for testcontainers; Added JWT authorization test suite for DataSQRL; Added analytics-only integration test case with Snowflake and Iceberg support; Added banking-batch integration test resources; Added clickstream integration test suite with paginated GraphQL support; Added integration test for Kafka retention configuration; Added integration test for PostgreSQL index selection edge cases; Added integration test for multi-batch compilation with table imports; Added integration test for stateful temporal joins with TTL; Added integration test resources for sensor and user activity use cases; Added integration tests for Avro schema handling and Java UDFs; Added integration tests for DuckDB function translation; Added integration tests for Flink SQL to PostgreSQL function mappings; Added integration tests for Flink string and utility functions; Added integration tests for Flink-only compilation and Iceberg export workflows; Added integration tests for JWT-authorized GraphQL mutations, subscriptions, and queries; Added integration tests for OpenAI stdlib use cases; Added integration tests for PostgreSQL array handling and GraphQL mapping; Added integration tests for PostgreSQL function translation and row serialization; Added integration tests for Redshift, Spark SQL, and Trino dialects; Added integration tests for TO\_CHANGELOG functionality; Added integration tests for complex mutation scenarios with Iceberg and Kafka; Added integration tests for filtered distinct and ARRAY\_AGG operations; Added integration tests for math and vector standard library functions; Added integration tests for passthrough employee hierarchy queries; Added integration tests for seedshop tutorial connectors and load functions; Added integration tests for server-side function execution; Added integration tests for the sensors-full-compile use case; Added shared banking test fixtures; Added snapshot for ApplicationInfoTest in analytics-only use case; Added snapshot tests for JWT-authorized GraphQL mutations, subscriptions, and queries; Added test case for OAuth authentication with MCP endpoints; Added test case for combined JWT-OAuth metadata access; Added test case for handling null timestamps in event streams; Added test coverage for server-side client address resolution, pagination metadata, and GraphQL integration; Added test coverage for table identity preservation in deferred INSERT statements; Added test data fixtures for book club scenarios; Added test data fixtures for multiple use-case examples; Added test for Avro legacy timestamp mapping in schema inference; Added test for DuckDB CTE materialization with Iceberg scan reuse; Added test for Flink HTTP connector lookup; Added test for LIKE source table validation in mutation database; Added test for distinct materialization with Postgres export; Added test for unauthorized JWT access; Added test infrastructure for integration testing; Added test resources for Avro schema compilation; Added test resources for logging and Vert.x REST configuration; Added test resources for sensors-shared use case; Added test utilities and assertions in sqrl-planner; Added tests for Flink SQL node generation and identity preservation; Added tests for Flink compile error output handling; Added tests for Flink planner conflict resolution, Iceberg configuration, and deployment model serialization; Added tests for GraphQL query metrics, tail sample tracing, and operation-only preparsing; Added tests for GraphQL schema conversion; Added tests for JBangRunner, OsProcessManager, and SqrlInjector utilities; Added tests for JWT configuration merging and serialization; Added tests for Kafka health tracking and case-insensitive JSON fetching; Added tests for PgPartmanExtension DDL generation; Added tests for SQL script statement splitting edge cases; Added tests for SQRL error code descriptions; Added tests for TestOutputManager console log redirection; Added tests for environment variable resolution and SQL table name extraction; Added tests for hint parsing and validation logic; Added tests for index selection logic and sort order handling; Added tests for module loading and UDF classloader lifecycle; Added tests for nullable GraphQL API arguments; Added tests for protocol-specific API exposure and configuration; Added tests for relational planner components; Added tests for relationship field preservation in complex queries; Added tests for schema evolution type compatibility; Added tests for schema type handling and combination logic; Added tests for server configuration template serialization; Added unit tests for Avro schema factory and type conversion; Added unit tests for PostgreSQL DDL generation and notification triggers; Added unit tests for SQRL CLI commands and utilities; Added unit tests for SQRL configuration and compiler components; Added unit tests for preprocessors; Added unit tests for server configuration and GraphQL parser settings; Expanded container integration test coverage for server features; New JUnit 5-based integration test infrastructure for compiler and use-case validation; Removed TPC-H and scratch SQL test resources; Removed unused example parsing test.
Dependencies
Documentation site dependencies updated to React 19 and Node 22
The documentation site now requires Node.js 22 or higher and has upgraded its React and React-DOM dependencies to version 19.2.8. Additionally, the Docusaurus tooling has been updated to version 3.10.2, and the local search plugin has been bumped to 0.55.3.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 62 → 66 (+3.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 81 → 88 (+6.8)
- Architecture 100 → 98 (-2.3)
- Maturity 75 → 75 (-0.2)
- Readiness 59 → 58 (-0.8)
- Security 54 → 64 (+10.0)
Resolved (84)
- Boundary-crossing change coupling: CompilationProcess.java ↔ GraphqlSchemaHandler.java (sqrl-cli/src/main/java/com/datasqrl/compile/CompilationProcess.java)
- Change coupling: MutationConfigurationImpl.java ↔ SubscriptionConfigurationImpl.java (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/MutationConfigurationImpl.java)
- Change coupling: VertxJdbcClient.java ↔ VertxQueryExecutionContext.java (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/jdbc/VertxJdbcClient.java)
- Change coupling: docusaurus.config.ts ↔ index.tsx (documentation/docusaurus.config.ts)
- Coverage not included — suite not readable by the collector
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- Critical CVE: [GHSA redacted] (documentation/package-lock.json)
- DatasqrlTest.run (cognitive 19) (sqrl-cli/src/main/java/com/datasqrl/cli/DatasqrlTest.java)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/planner/util/CompiledPlanCondenser.java)
- Duplicated block (11 lines × 2) (sqrl-cli/src/main/java/com/datasqrl/cli/ExecCmd.java)
- Duplicated block (12 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/auth/OAuth2AuthFactory.java)
- Duplicated block (13 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/modules/ApiDeploymentModule.java)
- Duplicated block (14 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/auth/JwtFailureHandler.java)
- Duplicated block (16 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/swagger/SwaggerService.java)
- Duplicated block (6 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/builtinflink/LogSqlTranslation.java)
- Duplicated block (7 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/function/translation/PostgresLikeTranslations.java)
- Duplicated block (7 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/function/translation/duckdb/builtin/ElementSqlTranslation.java)
- Duplicated block (7 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/graphql/GraphQLQueryMetricsInstrumentation.java)
- Duplicated block (7 lines × 4) (sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/builtinflink/FromBase64SqlTranslation.java)
- …and 64 more
New (207)
- CI installs an unverified third-party binary (.circleci/config.yml)
- ClassTooLong: CalciteUtil (sqrl-planner/src/main/java/com/datasqrl/util/CalciteUtil.java)
- ClassTooLong: DAGPlanner (sqrl-planner/src/main/java/com/datasqrl/planner/dag/DAGPlanner.java)
- ClassTooLong: FlinkSqlNodes (sqrl-planner/src/main/java/com/datasqrl/engine/stream/flink/FlinkSqlNodes.java)
- ClassTooLong: GraphQLSchemaConverter (sqrl-planner/src/main/java/com/datasqrl/server/converter/GraphQLSchemaConverter.java)
- ClassTooLong: McpBridgeVerticle (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/McpBridgeVerticle.java)
- ClassTooLong: SQRLLogicalPlanAnalyzer (sqrl-planner/src/main/java/com/datasqrl/planner/analyzer/SQRLLogicalPlanAnalyzer.java)
- ClassTooLong: SqlScriptPlanner (sqrl-planner/src/main/java/com/datasqrl/planner/SqlScriptPlanner.java)
- ClassTooLong: Sqrl2FlinkSQLTranslator (sqrl-planner/src/main/java/com/datasqrl/planner/Sqrl2FlinkSQLTranslator.java)
- Critical CVE: [CVE redacted] (documentation/package-lock.json)
- Critical CVE: [CVE redacted] (documentation/package-lock.json)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Duplicated block (10 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/json/JsonArrayAggSqlTranslation.java)
- Duplicated block (10 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/json/JsonArraySqlTranslation.java)
- Duplicated block (10 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/function/translation/postgres/json/JsonObjectSqlTranslation.java)
- Duplicated block (10 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/util/BaseFileUtil.java)
- Duplicated block (11 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/auth/OAuth2AuthFactory.java)
- Duplicated block (11 lines × 2) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/kafka/JsonDeserializer.java)
- Duplicated block (11 lines × 3) (sqrl-server/sqrl-server-vertx-base/src/main/java/com/datasqrl/server/GraphQLServerVerticle.java)
- Duplicated block (12 lines × 2) (sqrl-planner/src/main/java/com/datasqrl/engine/stream/flink/FlinkSqlNodes.java)
- …and 187 more
Changes since last survey
- 118 commits — 98 feature/other, 20 fixes
By area
- (root) — 48 commits
- sqrl-testing/sqrl-testing-integration — 24 commits
- sqrl-planner/src — 18 commits
- documentation/docs — 10 commits
- sqrl-cli/src — 6 commits
- sqrl-server/sqrl-server-vertx-base — 4 commits
- documentation/package-lock.json — 2 commits
- .agents/skills — 1 commit
- .circleci/config.yml — 1 commit
- .github/workflows — 1 commit
- documentation/blog — 1 commit
- documentation/static — 1 commit
- sqrl-testing/sqrl-testing-container — 1 commit
Notable commits
- fix: ci: Fix JaCoCo reports for containered tests (#1794)
- fix: ci: Fix minio image tag (#2377)
- fix: fix!: Enforce a single ROWTIME for SqrlDefinitions (#2268)
- fix: fix: Add INSERT statements to DAG planning (#2278)
- fix: fix: Allow NOW() predicates on Flink INSERT INTO stages (#2315)
- fix: fix: Analyze process table function inputs (#2293)
- fix: fix: Flaky banking-batch use-case test (#2286)
- fix: fix: INSERT analysis should not mutate query (#2364)
- fix: fix: Ignore internal aliases during RelNode normalization (#2332)
- fix: fix: Include partition key in hashed primary keys (#2382)
- fix: fix: Make index selection independent of the number of queries on a table (#2318)
- fix: fix: PostgreSQL relation alias serialization (#2383)
- fix: fix: Preserve distinct state for materialized stream consumers (#2297)
- fix: fix: Preserve hinted view identity during collapse (#2334)
- fix: fix: Preserve table identity in deferred INSERT statements (#2366)
- fix: fix: Resolve Flink insert conflicts after changelog inference (#2319)
- fix: fix: Resolve LIKE source table across databases in mutation database validation (#2292)
- fix: fix: Resolve conflicts for mismatched upsert keys properly (#2329)
- fix: fix: Restrict custom build folders to build/ subdirectories (#2314)
- fix: fix: Update unit test snapshots to latest source state
- …and 98 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
DataSQRL/sqrl was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 3e1adfc1cceda8ba02b3807920237e2277dffc07 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-90d5d2fe38ee.