Skip to content

feat(core): support for Decimal#6068

Merged
bluestreak01 merged 447 commits intomasterfrom
rd_decimal_integration
Nov 10, 2025
Merged

feat(core): support for Decimal#6068
bluestreak01 merged 447 commits intomasterfrom
rd_decimal_integration

Conversation

@RaphDal
Copy link
Copy Markdown
Contributor

@RaphDal RaphDal commented Aug 19, 2025

The goal of this PR is to integrate the Decimal type (implemented in #5991) into the database and make it available to users through SQL, ILP and Parquet.

This integration will support decimal that have a precision of 76 or less, while using the relevant type to store the required value.

SQL

This PR will add the decimal column type, usable through CREATE TABLE, ALTER TABLE [table name] ADD COLUMN or ALTER TABLE [table name] ALTER COLUMN [column name] TYPE.

To declare a decimal column type, you need to use the syntax: DECIMAL(precision, scale).

  • The precision defines the maximum count of digits that can be stored into this column. defaults to min(scale + 15, 76)
  • The scale defines the maximum count of digits in the right side of the dot (a.k.a. the fractional part). defaults to 3

For example, to create a table with decimal columns:

CREATE TABLE trades (
  timestamp TIMESTAMP,
  symbol SYMBOL,
  amount DECIMAL(36, 8),
  price DECIMAL(18, 4)
) TIMESTAMP(timestamp)
PARTITION BY day;

This PR also allows you to do some basic arithmetic operations on decimals such as +, -, /, *, % and to compare decimal types.

Note

Unlike the more traditional types like double and int, when an operation cannot give you an accurate value, the database will throw an error. There is an exception for the division operation which will return the HALF_DOWN rounded quotient to the highest scale of the 2 operands, e.g., 10.0 / 6.000 will give you 1.667.

ILP

This PR allows decimals to be inserted through the InfluxDB Line Protocol.

PGWire

With this PR, the decimal type should be compliant with the PGWire protocol, EXCEPT that floating point literals are interpreted as double and not decimal (unlike postgres).

As a consequence, when inserting a value to a decimal column (without the binary format), the user have to manually cast it to a decimal (we don't implicitly convert doubles to decimal to avoid unexpected precision loss) or use the 'm' suffix:

CREATE TABLE x (value DECIMAL);
INSERT INTO x VALUES (123.456); -- fails, double cannot be implicitly cast to decimal
INSERT INTO x VALUES (123.456m); -- ok: 'm' suffix -> we interpret the literal as a decimal
INSERT INTO x VALUES (cast(123.456 as DECIMAL)); -- ok: cast used, but might lead to precision loss

TODO

  • Add null sentinel value for Decimal256.
  • Implement memory I/O methods to Memory classes.
  • Implement serialization in TableWriter.
  • Implement in RowCopier.
  • Implement in RecordSink.
  • Implement in RecordValueSink. - @RaphDal
  • Implement in BindVariableService.
  • Implement in WalEventCursor.
  • Add column metadata to store the precision/scale values.
  • Check precision/scale values when storing decimals.
  • Implement getDecimal[128/256] in Record.
  • Add DECIMAL(p, s) syntax to SQL parser and lexer.
  • Implement literal parsing in SQL.
  • Add specific literal (e.g. 23m).
  • Lossless casting from literal constant double.
  • Implicit widening cast.
  • Support CREATE TABLE.
  • Support ALTER COLUMN TYPE. - @RaphDal
  • Implement GROUP BY with Decimal values. - @RaphDal
  • Implement arithmetic functions (add, subtract, multiply, divide, modulo, negate). - @puzpuzpuz
  • Implement comparison operators (<=, <, ==, >, >=). - @puzpuzpuz
  • Implement Decimal support in record comparators, so that ORDER BY works with decimal columns and expressions. - @RaphDal
  • Implement type casting functions (to/from double, long, int, varchar, etc.). - @RaphDal
  • Implicit cast from long/int/short/byte:
    • Functions
    • INSERT
    • INSERT AS SELECT - @RaphDal
    • UPDATE
  • Support UPDATEs on Decimal columns.
  • Support Decimal columns as dedup keys. - @RaphDal
  • Support CSV import/export. - @RaphDal
  • Support ILP. - @RaphDal
  • Support PGWire. - @RaphDal
    • Binding binary format
  • Support HTTP Rest API.
  • Implement Decimal support in concat, coalesce, nullif. - @RaphDal
  • Implement Decimal support in CASE.
  • Implement rnd_decimal. - @puzpuzpuz
  • Fix ::decimal(18,5) error (cast(x as decimal(18,5)) works).
  • Implement basic aggregate functions for Decimal: min/max, avg, first/last, first_not_null/last_not_null, sum, count. - @puzpuzpuz
  • Implement SAMPLE BY fill support for Decimal. - @RaphDal
    • [nice-to-have] LINEAR interpolation
  • [nice-to-have] Implement window functions for Decimal: same set as for double.
  • Implement basic math functions: abs, round*, sign, least, greatest, floor, ceil. - @RaphDal
  • Update documentation to add the Decimal type. - @RaphDal
  • [nice-to-have] Decimal support in Parquet.
  • [nice-to-have] Optimize multiplication and division by pow of 10.
  • [nice-to-have] Decimal operators support in JIT.
  • [nice-to-have] Implement advanced aggregate functions for Decimal: count_distinct, corr, covar_pop, covar_samp, stddev/stddev_samp, stddev_pop, string_agg, string_distinct_agg, variance/var_samp, var_pop.
  • [nice-to-have] Implement advanced math functions: ln, log, exp, sqrt.
  • [nice-to-have] Rosti support for simple Decimal aggregate functions.

Outstanding test TODOs:

  • Test INSERTs with Decimal values.
  • Test GROUP BY with Decimal values.
  • Test UNION with Decimal values, including mixed precisions/scales.
  • Test JOINs with Decimal values, including implicit casts.
  • Test Decimal coltops.
  • Test Decimal bind variables.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Aug 19, 2025

Important

Review skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch rd_decimal_integration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@RaphDal RaphDal marked this pull request as draft August 19, 2025 12:57
@RaphDal RaphDal marked this pull request as ready for review September 10, 2025 06:45
@questdb questdb deleted a comment from CLAassistant Sep 11, 2025
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Sep 11, 2025

CLA assistant check
All committers have signed the CLA.

@RaphDal RaphDal force-pushed the rd_decimal_integration branch from eea8752 to 2f8ef90 Compare September 17, 2025 13:11
@azure-pipelines
Copy link
Copy Markdown

There was an error handling pipeline event 5c007a30-229c-4014-9a75-934c4e8f9b74.

@puzpuzpuz puzpuzpuz force-pushed the rd_decimal_integration branch from 567a97d to 22c015c Compare September 20, 2025 17:02
@glasstiger
Copy link
Copy Markdown
Contributor

[PR Coverage check]

😍 pass : 10047 / 11341 (88.59%)

file detail

path covered line new line coverage
🔵 io/questdb/cairo/TimestampDriver.java 0 8 00.00%
🔵 parquet_write/file.rs 0 1 00.00%
🔵 io/questdb/griffin/engine/functions/groupby/NSumDoubleGroupByFunction.java 0 13 00.00%
🔵 io/questdb/cairo/map/UnorderedVarcharMap.java 0 2 00.00%
🔵 io/questdb/griffin/engine/functions/groupby/InterpolationGroupByFunction.java 0 8 00.00%
🔵 io/questdb/griffin/engine/functions/GroupByFunction.java 0 2 00.00%
🔵 io/questdb/cairo/arr/DirectArray.java 0 2 00.00%
🔵 io/questdb/cairo/sql/ArrayFunction.java 0 6 00.00%
🔵 io/questdb/griffin/engine/functions/decimal/ToDecimal128Function.java 0 4 00.00%
🔵 io/questdb/griffin/engine/window/WindowFunction.java 0 6 00.00%
🔵 io/questdb/cairo/vm/api/NullMemory.java 0 2 00.00%
🔵 io/questdb/cutlass/text/TextMetadataParser.java 0 2 00.00%
🔵 parquet_write/schema.rs 0 1 00.00%
🔵 io/questdb/griffin/engine/functions/conditional/NullIfDecimalFunctionFactory.java 32 116 27.59%
🔵 io/questdb/cutlass/line/tcp/LineTcpMeasurementEvent.java 17 53 32.08%
🔵 io/questdb/griffin/engine/functions/groupby/FirstNotNullDecimalGroupByFunctionFactory.java 42 97 43.30%
🔵 io/questdb/griffin/engine/functions/groupby/LastDecimalGroupByFunctionFactory.java 37 81 45.68%
🔵 io/questdb/griffin/engine/functions/json/JsonExtractFunction.java 5 11 45.45%
🔵 io/questdb/cutlass/line/LineTcpSenderV3.java 21 45 46.67%
🔵 io/questdb/griffin/engine/functions/groupby/LastNotNullDecimalGroupByFunctionFactory.java 55 109 50.46%
🔵 io/questdb/cutlass/line/http/LineHttpSenderV3.java 21 42 50.00%
🔵 io/questdb/griffin/engine/functions/lt/AbstractLtBinaryFunction.java 6 12 50.00%
🔵 io/questdb/client/Sender.java 11 21 52.38%
🔵 io/questdb/cairo/TableWriter.java 16 29 55.17%
🔵 io/questdb/cutlass/line/tcp/LineTcpEventBuffer.java 16 29 55.17%
🔵 io/questdb/griffin/ConvertOperatorImpl.java 7 12 58.33%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal32GroupByFunction.java 74 119 62.18%
🔵 io/questdb/griffin/engine/functions/math/ArithmeticDecimal256Function.java 32 51 62.75%
🔵 io/questdb/cairo/map/ShardedMapCursor.java 5 8 62.50%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimal32GroupByFunction.java 65 102 63.73%
🔵 io/questdb/griffin/engine/functions/groupby/FirstDecimalGroupByFunctionFactory.java 127 196 64.80%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal32Rescale256GroupByFunction.java 95 144 65.97%
🔵 io/questdb/griffin/engine/functions/math/ArithmeticDecimal128Function.java 31 46 67.39%
🔵 io/questdb/cairo/map/Unordered4MapValue.java 20 29 68.97%
🔵 io/questdb/cairo/map/Unordered8MapValue.java 20 29 68.97%
🔵 io/questdb/cairo/map/Unordered2MapValue.java 20 29 68.97%
🔵 io/questdb/cutlass/line/tcp/LineTcpParser.java 22 31 70.97%
🔵 io/questdb/cairo/map/UnorderedVarcharMapValue.java 22 31 70.97%
🔵 io/questdb/griffin/engine/functions/groupby/MinDecimalGroupByFunctionFactory.java 148 204 72.55%
🔵 io/questdb/griffin/engine/groupby/SimpleMapValue.java 32 44 72.73%
🔵 io/questdb/cutlass/line/tcp/LineWalAppender.java 59 77 76.62%
🔵 io/questdb/std/GenericLexer.java 30 39 76.92%
🔵 io/questdb/griffin/engine/functions/bind/DecimalBindVariable.java 17 22 77.27%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal128LoaderFunctionFactory.java 107 137 78.10%
🔵 io/questdb/griffin/engine/functions/groupby/KSumDoubleGroupByFunction.java 13 16 81.25%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDoubleGroupByFunction.java 9 11 81.82%
🔵 io/questdb/griffin/engine/functions/DecimalFunction.java 30 37 81.08%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal256LoaderFunctionFactory.java 115 141 81.56%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal64LoaderFunctionFactory.java 104 126 82.54%
🔵 io/questdb/griffin/engine/functions/groupby/MaxDecimalGroupByFunctionFactory.java 29 35 82.86%
🔵 io/questdb/griffin/engine/functions/math/NegDecimalFunctionFactory.java 57 69 82.61%
🔵 io/questdb/griffin/engine/functions/lt/LtDecimalFunctionFactory.java 108 129 83.72%
🔵 io/questdb/griffin/engine/functions/eq/EqDecimalFunctionFactory.java 80 96 83.33%
🔵 io/questdb/griffin/engine/functions/rnd/RndDecimalFunctionFactory.java 73 87 83.91%
🔵 io/questdb/griffin/engine/functions/groupby/AbstractCountGroupByFunction.java 5 6 83.33%
🔵 io/questdb/griffin/engine/functions/constants/Decimal256Constant.java 11 13 84.62%
🔵 io/questdb/griffin/engine/functions/groupby/CountLongConstGroupByFunction.java 6 7 85.71%
🔵 io/questdb/cairo/vm/MemoryPARWImpl.java 37 43 86.05%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimal256GroupByFunction.java 45 51 88.24%
🔵 io/questdb/cutlass/pgwire/PGConnectionContext.java 8 9 88.89%
🔵 io/questdb/cutlass/line/http/AbstractLineHttpSender.java 8 9 88.89%
🔵 io/questdb/cairo/DecimalColumnTypeConverter.java 78 87 89.66%
🔵 io/questdb/griffin/engine/functions/math/ArithmeticDecimal64Function.java 35 39 89.74%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal256GroupByFunction.java 61 68 89.71%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal256Rescale256GroupByFunction.java 78 87 89.66%
🔵 io/questdb/griffin/engine/functions/bind/BindVariableServiceImpl.java 67 75 89.33%
🔵 io/questdb/griffin/engine/functions/cast/CastFloatToDecimalFunctionFactory.java 58 64 90.62%
🔵 io/questdb/griffin/engine/functions/cast/AbstractCastToDecimalFunction.java 10 11 90.91%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToLongFunctionFactory.java 167 184 90.76%
🔵 io/questdb/griffin/engine/functions/cast/AbstractCastToDecimal64Function.java 10 11 90.91%
🔵 io/questdb/griffin/engine/functions/cast/CastDoubleToDecimalFunctionFactory.java 58 64 90.62%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToIntFunctionFactory.java 170 187 90.91%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToByteFunctionFactory.java 175 193 90.67%
🔵 io/questdb/griffin/engine/functions/constants/Decimal128Constant.java 9 10 90.00%
🔵 io/questdb/cairo/wal/WriterRowUtils.java 47 52 90.38%
🔵 io/questdb/cairo/wal/WalDataRecord.java 22 24 91.67%
🔵 io/questdb/cutlass/text/types/DecimalAdapter.java 21 23 91.30%
🔵 io/questdb/griffin/SqlCompilerImpl.java 33 36 91.67%
🔵 io/questdb/griffin/engine/functions/math/DecimalTransformerFactory.java 401 438 91.55%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal128GroupByFunction.java 112 123 91.06%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToShortFunctionFactory.java 173 190 91.05%
🔵 io/questdb/cairo/RecordChain.java 12 13 92.31%
🔵 io/questdb/griffin/SqlParser.java 60 64 93.75%
🔵 io/questdb/griffin/SqlCodeGenerator.java 70 75 93.33%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimal64GroupByFunction.java 88 94 93.62%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal16GroupByFunction.java 44 47 93.62%
🔵 io/questdb/griffin/engine/functions/columns/DecimalColumn.java 15 16 93.75%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal8GroupByFunction.java 44 47 93.62%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal16Rescale256GroupByFunction.java 66 70 94.29%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimal16GroupByFunction.java 34 36 94.44%
🔵 io/questdb/griffin/engine/functions/math/LeastNumericFunctionFactory.java 121 128 94.53%
🔵 io/questdb/griffin/ExpressionParser.java 35 37 94.59%
🔵 io/questdb/griffin/FunctionParser.java 143 152 94.08%
🔵 io/questdb/griffin/engine/functions/math/GreatestNumericFunctionFactory.java 120 127 94.49%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal128Rescale256GroupByFunction.java 131 138 94.93%
🔵 io/questdb/std/Decimals.java 48 51 94.12%
🔵 io/questdb/cutlass/pgwire/PGOids.java 33 35 94.29%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal8Rescale256GroupByFunction.java 67 70 95.71%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal64GroupByFunction.java 106 111 95.50%
🔵 io/questdb/cairo/ColumnTypeConverter.java 19 20 95.00%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimal128GroupByFunction.java 107 112 95.54%
🔵 io/questdb/cutlass/line/tcp/DecimalBinaryFormatParser.java 82 85 96.47%
🔵 io/questdb/griffin/engine/functions/math/RoundDecimalFunctionFactory.java 95 98 96.94%
🔵 io/questdb/griffin/engine/functions/math/AbsDecimalFunctionFactory.java 57 59 96.61%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToFloatFunctionFactory.java 50 52 96.15%
🔵 io/questdb/griffin/engine/functions/conditional/CaseCommon.java 29 30 96.67%
🔵 io/questdb/cutlass/pgwire/PGPipelineEntry.java 273 282 96.81%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimal64Rescale256GroupByFunction.java 131 136 96.32%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToDoubleFunctionFactory.java 50 52 96.15%
🔵 io/questdb/cutlass/line/tcp/LineProtocolException.java 28 29 96.55%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimal8GroupByFunction.java 35 36 97.22%
🔵 io/questdb/cutlass/http/processors/ExportQueryProcessor.java 47 48 97.92%
🔵 io/questdb/cairo/ColumnType.java 71 73 97.26%
🔵 io/questdb/griffin/engine/functions/cast/CastShortToDecimalFunctionFactory.java 84 85 98.82%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToStrFunctionFactory.java 84 85 98.82%
🔵 io/questdb/griffin/DecimalUtil.java 239 242 98.76%
🔵 io/questdb/griffin/engine/functions/groupby/CountDecimalGroupByFunctionFactory.java 80 81 98.77%
🔵 io/questdb/std/Decimal64.java 166 168 98.81%
🔵 io/questdb/griffin/engine/functions/math/SignDecimalFunctionFactory.java 91 92 98.91%
🔵 io/questdb/std/Decimal128.java 234 235 99.57%
🔵 io/questdb/griffin/engine/orderby/RecordComparatorCompiler.java 239 241 99.17%
🔵 io/questdb/std/DecimalParser.java 110 111 99.10%
🔵 io/questdb/griffin/engine/functions/cast/CastIntToDecimalFunctionFactory.java 103 104 99.04%
🔵 io/questdb/cairo/sql/VirtualRecord.java 8 8 100.00%
🔵 io/questdb/cairo/vm/NullMemoryCMR.java 8 8 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/constants/Decimal8Constant.java 10 10 100.00%
🔵 io/questdb/griffin/engine/functions/math/CeilingDecimalFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/FloatFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/conditional/DecimalCaseFunction.java 13 13 100.00%
🔵 io/questdb/griffin/engine/functions/DateFunction.java 6 6 100.00%
🔵 io/questdb/cairo/vm/api/MemoryCARW.java 8 8 100.00%
🔵 io/questdb/cutlass/line/tcp/LineTcpMeasurementScheduler.java 9 9 100.00%
🔵 io/questdb/cairo/map/Unordered4Map.java 2 2 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundUpDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/std/Long256.java 5 5 100.00%
🔵 io/questdb/std/Misc.java 4 4 100.00%
🔵 io/questdb/griffin/engine/functions/UuidFunction.java 6 6 100.00%
🔵 io/questdb/cutlass/line/udp/LineUdpParserSupport.java 1 1 100.00%
🔵 io/questdb/cutlass/text/CopyImportJob.java 2 2 100.00%
🔵 io/questdb/griffin/engine/functions/math/CeilDecimalFunctionFactory.java 3 3 100.00%
🔵 io/questdb/cairo/map/OrderedMapFixedSizeRecord.java 11 11 100.00%
🔵 io/questdb/cairo/ImplicitCastException.java 14 14 100.00%
🔵 io/questdb/griffin/engine/functions/BinFunction.java 6 6 100.00%
🔵 io/questdb/cutlass/http/processors/LineHttpTudCache.java 4 4 100.00%
🔵 io/questdb/cairo/sql/PageFrameMemoryRecord.java 29 29 100.00%
🔵 io/questdb/cairo/map/Unordered8MapRecord.java 11 11 100.00%
🔵 io/questdb/griffin/engine/functions/array/ArrayCreateFunctionFactory.java 2 2 100.00%
🔵 io/questdb/cairo/map/Unordered4MapRecord.java 11 11 100.00%
🔵 io/questdb/cutlass/text/types/DateUtf8Adapter.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimalGroupByFunctionFactory.java 13 13 100.00%
🔵 io/questdb/griffin/engine/functions/lt/CompareDecimal128Function.java 16 16 100.00%
🔵 io/questdb/griffin/engine/functions/IntervalFunction.java 6 6 100.00%
🔵 io/questdb/griffin/FunctionFactoryDescriptor.java 31 31 100.00%
🔵 io/questdb/griffin/engine/functions/math/RemDecimalFunctionFactory.java 31 31 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/ToDecimalFunction.java 23 23 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/LastLongGroupByFunction.java 2 2 100.00%
🔵 io/questdb/griffin/engine/union/UnionRecord.java 20 20 100.00%
🔵 io/questdb/griffin/engine/functions/constants/Constants.java 8 8 100.00%
🔵 io/questdb/cairo/sql/Record.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/lt/CompareDecimal256Function.java 16 16 100.00%
🔵 io/questdb/griffin/engine/functions/UntypedFunction.java 6 6 100.00%
🔵 io/questdb/cairo/CursorPrinter.java 39 39 100.00%
🔵 io/questdb/cairo/map/OrderedMapValue.java 29 29 100.00%
🔵 io/questdb/griffin/SqlExecutionContextImpl.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/ToDecimal64Function.java 15 15 100.00%
🔵 io/questdb/griffin/engine/functions/BooleanFunction.java 6 6 100.00%
🔵 io/questdb/cairo/SingleRecordSink.java 8 8 100.00%
🔵 io/questdb/griffin/engine/functions/CharFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/SumDecimalGroupByFunctionFactory.java 13 13 100.00%
🔵 io/questdb/griffin/engine/functions/bind/NamedParameterLinkFunction.java 8 8 100.00%
🔵 io/questdb/cutlass/text/types/TypeManager.java 8 8 100.00%
🔵 io/questdb/PropertyKey.java 1 1 100.00%
🔵 io/questdb/griffin/engine/table/AsyncTopKAtom.java 1 1 100.00%
🔵 io/questdb/cairo/map/OrderedMap.java 14 14 100.00%
🔵 io/questdb/std/BytecodeAssembler.java 8 8 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundUpDecimalFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/cast/CastLongToDecimalFunctionFactory.java 103 103 100.00%
🔵 io/questdb/griffin/engine/functions/SymbolFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/CountUuidGroupByFunction.java 13 13 100.00%
🔵 io/questdb/cutlass/text/types/StringAdapter.java 1 1 100.00%
🔵 io/questdb/cutlass/text/types/SymbolAdapter.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/math/FloorDecimalFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/math/CeilingDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/cairo/map/Unordered2MapRecord.java 11 11 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundDownDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal16Function.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/constants/NullConstant.java 8 8 100.00%
🔵 io/questdb/griffin/engine/functions/RecordFunction.java 6 6 100.00%
🔵 io/questdb/cairo/map/UnorderedVarcharMapRecord.java 11 11 100.00%
🔵 io/questdb/griffin/engine/functions/VarcharFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/constants/IntConstant.java 1 1 100.00%
🔵 io/questdb/cutlass/http/processors/JsonQueryProcessorState.java 75 75 100.00%
🔵 io/questdb/griffin/SqlKeywords.java 18 18 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundHalfEvenDecimalFunctionFactory.java 3 3 100.00%
🔵 io/questdb/cairo/wal/WalEventCursor.java 47 47 100.00%
🔵 io/questdb/griffin/engine/functions/TimestampFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/cast/CastByteToDecimalFunctionFactory.java 82 82 100.00%
🔵 io/questdb/griffin/engine/functions/eq/EqLong256FunctionFactory.java 1 1 100.00%
🔵 io/questdb/griffin/engine/groupby/SampleByFillNullRecordCursorFactory.java 4 4 100.00%
🔵 io/questdb/griffin/engine/functions/AbstractGeoHashFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/conditional/NullCaseFunction.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/AvgDecimalRescaleGroupByFunctionFactory.java 29 29 100.00%
🔵 io/questdb/griffin/engine/functions/cast/CastVarcharToDecimalFunctionFactory.java 68 68 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal256Function.java 7 7 100.00%
🔵 io/questdb/cutlass/text/types/TimestampUtf8Adapter.java 1 1 100.00%
🔵 io/questdb/cairo/wal/WalEventWriter.java 20 20 100.00%
🔵 io/questdb/PropServerConfiguration.java 3 3 100.00%
🔵 io/questdb/cutlass/line/tcp/DefaultColumnTypes.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundHalfEvenDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/cutlass/text/CopyImportTask.java 4 4 100.00%
🔵 io/questdb/cairo/wal/WalWriter.java 25 25 100.00%
🔵 io/questdb/griffin/engine/join/JoinRecord.java 20 20 100.00%
🔵 io/questdb/cutlass/text/DefaultTextConfiguration.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/constants/Decimal64Constant.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/ByteFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/cast/CastStrToDecimalFunctionFactory.java 69 69 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal64Function.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal128Function.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/conditional/CaseFunction.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/array/DoubleArrayAccessFunctionFactory.java 1 1 100.00%
🔵 io/questdb/cairo/map/RecordValueSinkFactory.java 22 22 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal32Function.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/math/SubDecimalFunctionFactory.java 42 42 100.00%
🔵 io/questdb/cairo/map/Unordered8Map.java 2 2 100.00%
🔵 io/questdb/cairo/TableUtils.java 26 26 100.00%
🔵 io/questdb/griffin/engine/functions/Long256Function.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/str/SHA1VarcharFunctionFactory.java 1 1 100.00%
🔵 io/questdb/cairo/map/Unordered2Map.java 2 2 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/CountUuidGroupByFunctionFactory.java 4 4 100.00%
🔵 io/questdb/griffin/engine/functions/math/RoundDownDecimalFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/bind/IndexedParameterLinkFunction.java 8 8 100.00%
🔵 io/questdb/cairo/RecordSinkFactory.java 175 175 100.00%
🔵 io/questdb/cairo/mv/MatViewRefreshJob.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/lt/LtLong256FunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/union/UnionCastRecord.java 20 20 100.00%
🔵 io/questdb/cairo/vm/api/MemoryCR.java 12 12 100.00%
🔵 io/questdb/griffin/engine/functions/str/ConcatFunctionFactory.java 46 46 100.00%
🔵 io/questdb/griffin/engine/ops/InsertAsSelectOperationImpl.java 2 2 100.00%
🔵 io/questdb/griffin/engine/functions/StrArrayFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/constants/Decimal32Constant.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/StrFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToVarcharFunctionFactory.java 83 83 100.00%
🔵 io/questdb/cutlass/text/types/VarcharAdapter.java 1 1 100.00%
🔵 io/questdb/std/Rnd.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/math/FloorDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/lt/CompareDecimal64Function.java 16 16 100.00%
🔵 io/questdb/griffin/engine/functions/IPv4Function.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/CursorFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/str/MD5VarcharFunctionFactory.java 1 1 100.00%
🔵 io/questdb/griffin/JsonPlanSink.java 12 12 100.00%
🔵 io/questdb/cutlass/text/CsvFileIndexer.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/UndefinedFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/DoubleFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/groupby/GroupByUtils.java 2 2 100.00%
🔵 io/questdb/cutlass/text/ParallelCsvFileImporter.java 1 1 100.00%
🔵 io/questdb/griffin/UpdateOperatorImpl.java 20 20 100.00%
🔵 io/questdb/griffin/engine/functions/groupby/FirstLongGroupByFunction.java 2 2 100.00%
🔵 io/questdb/griffin/engine/functions/constants/DecimalTypeConstant.java 10 10 100.00%
🔵 io/questdb/cairo/sql/VirtualFunctionRecord.java 8 8 100.00%
🔵 io/questdb/griffin/engine/groupby/SampleByFillRecord.java 8 8 100.00%
🔵 io/questdb/griffin/engine/functions/math/MulDecimalFunctionFactory.java 14 14 100.00%
🔵 io/questdb/griffin/engine/functions/constants/Decimal16Constant.java 10 10 100.00%
🔵 io/questdb/std/DecimalKnuthDivider.java 1 1 100.00%
🔵 io/questdb/cairo/map/OrderedMapVarSizeRecord.java 11 11 100.00%
🔵 io/questdb/griffin/TextPlanSink.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/math/DivDecimalFunctionFactory.java 14 14 100.00%
🔵 io/questdb/griffin/engine/functions/conditional/CoalesceFunctionFactory.java 163 163 100.00%
🔵 io/questdb/griffin/engine/ops/InsertOperationImpl.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/LongFunction.java 6 6 100.00%
🔵 io/questdb/std/Numbers.java 9 9 100.00%
🔵 io/questdb/griffin/InsertRowImpl.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/math/AddDecimalFunctionFactory.java 43 43 100.00%
🔵 io/questdb/griffin/engine/functions/ShortFunction.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/Long128Function.java 6 6 100.00%
🔵 io/questdb/griffin/engine/functions/math/CeilDecimalZeroScaleFunctionFactory.java 3 3 100.00%
🔵 io/questdb/griffin/engine/functions/IntFunction.java 6 6 100.00%
🔵 io/questdb/griffin/RecordToRowCopierUtils.java 179 179 100.00%
🔵 io/questdb/griffin/engine/functions/decimal/Decimal8Function.java 7 7 100.00%
🔵 io/questdb/griffin/engine/functions/MultiArgFunction.java 13 13 100.00%
🔵 io/questdb/cutlass/text/TextLoader.java 1 1 100.00%
🔵 io/questdb/griffin/engine/functions/cast/CastDecimalToDecimalFunctionFactory.java 224 224 100.00%
🔵 io/questdb/griffin/SqlUtil.java 3 3 100.00%

@bluestreak01 bluestreak01 merged commit 020ec80 into master Nov 10, 2025
36 checks passed
@bluestreak01 bluestreak01 deleted the rd_decimal_integration branch November 10, 2025 21:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants