Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql: internal error: estimated distinct and/or null count must be non-zero #37754

Closed
maddyblue opened this issue May 23, 2019 · 3 comments · Fixed by #37913
Closed

sql: internal error: estimated distinct and/or null count must be non-zero #37754

maddyblue opened this issue May 23, 2019 · 3 comments · Fixed by #37913
Assignees
Labels
C-bug Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior. O-sqlsmith

Comments

@maddyblue
Copy link
Contributor

CREATE TABLE table5 (
    col0 CHAR NOT NULL, col1 "char" NULL, col2 OID NOT NULL, col3 BOOL NOT NULL,
    FAMILY fam0 (col0, col2, col1, col3),
    PRIMARY KEY (col3 DESC, col2 DESC, col0, col1 ASC)
);

CREATE TABLE table4 (
    col0  BOOL NULL,
    col1  UUID NOT NULL,
    col2  DATE NOT NULL,
    col3  DATE NULL,
    col4  INT2 NULL,
    col5  INT8,
    col6  STRING NULL,
    col7  REGNAMESPACE NOT NULL,
    col8  REGPROCEDURE,
    col9  INT2 NULL,
    col10 BYTES,
    col11 UUID NOT NULL,
    col12 BOOL,
    col13 INT4 NULL,
    col14 REGPROC NOT NULL,
    col15 STRING NOT NULL,
    FAMILY fam0 (col3, col1),
    FAMILY fam1 (col4, col11, col12, col14),
    FAMILY fam2 (col7),
    FAMILY fam3 (col9, col0, col2, col13, col6, col15, col5, col10, col8),
    PRIMARY KEY (col3),
    UNIQUE (col12 ASC, col1, col15 DESC, col5),
    UNIQUE (col8 DESC, col14, col1 DESC, col10 ASC, col13, col3 ASC, col12 DESC, col6 ASC, col2),
    INDEX (col13 ASC, col12, col7 ASC, col11 ASC, col1, col3, col6 DESC, col4 ASC, col2 DESC, col14 ASC, col10 ASC, col5 DESC, col0 DESC, col8, col9 ASC),
    UNIQUE (col4, col12 ASC, col15, col2 DESC, col3 ASC, col5 ASC, col0 DESC, col8 ASC, col1, col7, col6, col11 DESC, col10 ASC)
);

CREATE TABLE tab_7371 (
    col0 INT4 NOT NULL, col1 NAME NOT NULL, col2 INET NULL, col3 FLOAT8 NOT NULL, col4 BOOL, col5 UUID NULL, col6 INET NOT NULL,
    FAMILY fam0 (col6, col5, col0, col2, col4, col1, col3),
    PRIMARY KEY (col6 DESC, col3, col2 DESC, col5)
);

CREATE TABLE table0 (
    col0  NAME NULL,
    col1  VARCHAR,
    col2  TIMESTAMP NULL,
    col3  TIMESTAMP NULL,
    col4  BIT(14) NULL,
    col5  REGNAMESPACE NULL,
    col6  REGPROC NULL,
    col7  REGCLASS NOT NULL,
    col8  STRING NOT NULL,
    col9  BIT(11),
    col10 "char" NULL,
    col11 REGTYPE NULL,
    col12 REGPROC,
    col13 FLOAT4 NOT NULL,
    col14 INT4,
    col15 INET NOT NULL,
    col16 "char",
    col17 UUID NOT NULL,
    FAMILY fam0 (col3, col15, col11, col6, col4, col0, col17, col10, col5, col13, col12, col8, col16, col7, col9, col2, col14, col1),
    PRIMARY KEY (col8 ASC, col10, col12, col0, col7, col9 DESC, col1 DESC, col16, col13 DESC, col4 DESC, col11 ASC, col5 DESC, col3 DESC, col2 DESC)
);

DELETE FROM defaultdb.public.table5 AS tab_8515
      WHERE tab_8515.col3
        AND EXISTS(
                    WITH with_2038 (col_27534, col_27535) AS (
                                                            SELECT *
                                                              FROM (VALUES ((-9036329067344464130):::INT8, (-3682313584611.620886):::DECIMAL)) AS tab_8516 (
                                                                                                                                                            col_27534,
                                                                                                                                                            col_27535
                                                                                                                                                           )
                                                          ),
                         with_2040 (col_27565) AS (
                                                 SELECT *
                                                   FROM (
                                                            VALUES ('08:49:32.581259':::TIME),
                                                                   (
                                                                    '23:59:59.999999':::TIME::TIME
                                                                    + (
                                                                            (
                                                                                (
                                                                                    COALESCE('1976-12-08':::DATE, '1976-02-03':::DATE)::DATE
                                                                                    - '1996-05-22':::DATE::DATE
                                                                                )::INT8
                                                                                * '3 mons 476 days 24:14:57.205438':::INTERVAL::INTERVAL
                                                                            )::INTERVAL
                                                                            / (
                                                                                    0.10199777940556079:::FLOAT8::FLOAT8
                                                                                    - (
                                                                                              SELECT pi()::FLOAT8 AS col_27564
                                                                                                FROM defaultdb.public.table4 AS tab_8518
                                                                                                     RIGHT JOIN defaultdb.public.tab_7371 AS tab_8519 ON false
                                                                                                     FULL JOIN defaultdb.public.table4 AS tab_8520
                                                                                                        RIGHT JOIN (
                                                                                                                VALUES (
                                                                                                                        decode(
                                                                                                                            e'\x00':::STRING::STRING,
                                                                                                                            regexp_extract(
                                                                                                                                e'\U00002603':::STRING::STRING,
                                                                                                                                e'/!i=/w\x1b':::STRING::STRING
                                                                                                                            )::STRING::STRING
                                                                                                                        )::BYTES,
                                                                                                                        B'0101000010011111101000',
                                                                                                                        COALESCE(
                                                                                                                            ARRAY[
                                                                                                                                (-8151680503865380040):::INT8,
                                                                                                                                (-3588493808518328829):::INT8
                                                                                                                            ],
                                                                                                                            ARRAY[
                                                                                                                                (-1533486185178522726):::INT8,
                                                                                                                                (-2104124767087334885):::INT8,
                                                                                                                                8975074925957091764:::INT8
                                                                                                                            ]
                                                                                                                        ),
                                                                                                                        B'1111010010'
                                                                                                                       ),
                                                                                                                       (
                                                                                                                        NULL,
                                                                                                                        B'0000111001100101001110',
                                                                                                                        ARRAY[
                                                                                                                            4444660667959846878:::INT8,
                                                                                                                            (-6715190995309235134):::INT8,
                                                                                                                            892147947621069386:::INT8,
                                                                                                                            (-1975154939350501955):::INT8
                                                                                                                        ],
                                                                                                                        B'0010000100'
                                                                                                                       ),
                                                                                                                       (
                                                                                                                        e'\\xdf4cb60106262d':::BYTES,
                                                                                                                        B'1101010111000001101000',
                                                                                                                        ARRAY[
                                                                                                                            3743540861287365927:::INT8,
                                                                                                                            (-8922007347228370476):::INT8,
                                                                                                                            8831554496615127082:::INT8,
                                                                                                                            0:::INT8,
                                                                                                                            (-1):::INT8
                                                                                                                        ],
                                                                                                                        B'0101000000'
                                                                                                                       )
                                                                                                            ) AS tab_8526 (col_27560, col_27561, col_27562, col_27563)
                                                                                                            RIGHT JOIN defaultdb.public.tab_7371 AS tab_8527 ON
                                                                                                                    false ON NULL ON false,
                                                                                                     defaultdb.public.table0 AS tab_8528
                                                                                            GROUP BY tab_8518.col3
                                                                                              HAVING max(tab_8527.col4::BOOL)::BOOL
                                                                                            ORDER BY tab_8518.col3,
                                                                                                     tab_8518.col3 DESC,
                                                                                                     tab_8518.col3 DESC,
                                                                                                     tab_8518.col3 ASC,
                                                                                                     tab_8518.col3 ASC
                                                                                               LIMIT 1:::INT8
                                                                                        )::FLOAT8
                                                                                )::FLOAT8
                                                                        )::INTERVAL
                                                                   ),
                                                                   ('02:52:55.574509':::TIME),
                                                                   (NULL),
                                                                   ('05:51:59.004965':::TIME),
                                                                   (NULL)
                                                        ) AS tab_8529 (col_27565)
                                                 EXCEPT ALL SELECT * FROM (VALUES ('07:53:44.886685':::TIME)) AS tab_8530 (col_27566)
                                               ),
                         with_2045 (col_27611, col_27612, col_27613, col_27614, col_27615) AS (
                                                                                            SELECT *
                                                                                              FROM (
                                                                                                    VALUES (
                                                                                                            NULL,
                                                                                                            e'\\x01d0':::BYTES,
                                                                                                            true,
                                                                                                            3791502246166364292:::INT8,
                                                                                                            NULL
                                                                                                           )
                                                                                                   ) AS tab_8543 (
                                                                                                                    col_27611,
                                                                                                                    col_27612,
                                                                                                                    col_27613,
                                                                                                                    col_27614,
                                                                                                                    col_27615
                                                                                                                 )
                                                                                           )
                  SELECT NULL AS col_27616,
                         B'11010010101111010101101111' AS col_27617,
                         NULL AS col_27618,
                         '-53 years -4 mons -191 days -06:55:29.211485':::INTERVAL AS col_27619
                    FROM with_2040
                ORDER BY with_2040.col_27565, with_2040.col_27565 DESC
                   LIMIT 59:::INT8
            );
statistics_builder.go:2219: estimated distinct and/or null count must be non-zero | string
github.com/cockroachdb/cockroach/pkg/sql/opt/memo/statistics_builder.go:2219: in finalizeFromRowCount()
github.com/cockroachdb/cockroach/pkg/sql/opt/memo/statistics_builder.go:2209: in finalizeFromCardinality()
github.com/cockroachdb/cockroach/pkg/sql/opt/memo/statistics_builder.go:651: in buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/memo/logical_props_builder.go:237: in buildSelectProps()
github.com/cockroachdb/cockroach/pkg/sql/opt/memo/expr.og.go:13058: in MemoizeSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/norm/factory.og.go:809: in ConstructSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/groupby.go:311: in buildAggregation()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:674: in buildSelectClause()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:588: in buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:216: in buildStmt()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/subquery.go:220: in buildSubquery()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/subquery.go:101: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:478: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/overload.go:474: in typeCheckOverloadedExprs()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:310: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:1120: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:478: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/overload.go:474: in typeCheckOverloadedExprs()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:310: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:1120: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:478: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/overload.go:474: in typeCheckOverloadedExprs()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:310: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:1120: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:270: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:310: in resolveType()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/values.go:66: in buildValuesClause()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:594: in buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:216: in buildStmt()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:110: in buildDataSource()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:58: in buildDataSource()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:785: in buildFromTablesRightDeep()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:762: in buildFromTables()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:709: in buildFrom()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:637: in buildSelectClause()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:588: in buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/union.go:33: in buildUnion()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:591: in buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:219: in buildStmt()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:452: in buildCTE()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:581: in buildSelect()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:216: in buildStmt()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/subquery.go:220: in buildSubquery()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/subquery.go:101: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:1523: in typeCheckAndRequire()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:1517: in typeCheckAndRequireBoolean()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:297: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:1120: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:270: in TypeCheck()
github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:280: in TypeCheckAndRequire()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:329: in resolveAndRequireType()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:738: in buildWhere()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/mutation_builder.go:198: in buildInputForUpdateOrDelete()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/delete.go:74: in buildDelete()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:207: in buildStmt()
github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:158: in Build()
github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:415: in buildExecMemo()
github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:147: in makeOptimizerPlan()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:763: in makeExecPlan()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:650: in dispatchToExecutionEngine()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:414: in execStmtInOpenState()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:100: in execStmt()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1201: in execCmd()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1137: in run()
github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:437: in ServeConn()
github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:580: in func1()
@maddyblue maddyblue added C-bug Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior. O-sqlsmith labels May 23, 2019
@maddyblue
Copy link
Contributor Author

Smaller repro:

CREATE TABLE table8 (
    col0 REGNAMESPACE NOT NULL, col1 INET, col2 BIT(20) NOT NULL, col3 BYTES NOT NULL, col4 REGPROCEDURE NOT NULL,
    FAMILY fam0 (col4, col3, col0, col1, col2),
    PRIMARY KEY (col0 ASC, col1 ASC, col3, col2 DESC, col4 DESC),
    UNIQUE (col4, col3 DESC),
    UNIQUE (col0 DESC, col2 DESC),
    INDEX (col2 DESC, col3, col1 ASC, col0 ASC, col4 DESC),
    UNIQUE (col2 ASC, col4 DESC, col1 ASC),
    UNIQUE (col2 ASC, col1 DESC, col0 ASC, col3 DESC, col4),
    INDEX (col4 DESC, col2)
);

CREATE TABLE table7 (
    col0  INET NOT NULL,
    col1  "char" NULL,
    col2  TIMESTAMPTZ NULL,
    col3  REGPROC NULL,
    col4  BOOL NOT NULL,
    col5  OID NULL,
    col6  VARCHAR,
    col7  INT4 NOT NULL,
    col8  VARCHAR,
    col9  FLOAT8,
    col10 INT8 NULL,
    FAMILY fam0 (col4, col7, col2, col3, col5, col10, col8, col0, col1, col9, col6),
    PRIMARY KEY (col4 ASC, col0 ASC, col9 DESC, col6 DESC),
    UNIQUE (col10 DESC, col4, col3, col5 ASC, col1, col9 DESC, col6),
    UNIQUE (col10 ASC, col3 DESC, col0 ASC),
    UNIQUE (col8 ASC, col0, col5 ASC, col10 DESC, col3, col1, col4 ASC, col6 ASC, col9, col2 ASC, col7 ASC),
    INDEX (col7, col2 ASC, col9, col8 ASC, col6 ASC, col0, col5 DESC, col3 DESC, col1 DESC, col10 ASC),
    INDEX (col0, col8 ASC, col9, col6, col1, col10 DESC, col3, col5 DESC, col4),
    INDEX (col7 ASC, col5 ASC, col0, col8 DESC, col2 DESC, col9 ASC),
    INDEX (col8, col4, col0 DESC, col1, col2, col5, col9 ASC, col3)
);

CREATE TABLE table6 (
    col0 TIMESTAMPTZ NULL, col1 BIT(48), col2 OID NOT NULL, col3 "char", col4 "char" NOT NULL,
    FAMILY fam0 (col3),
    FAMILY fam1 (col4),
    FAMILY fam2 (col1, col2),
    FAMILY fam3 (col0),
    PRIMARY KEY (col3 ASC)
);

CREATE TABLE tab_7371 (
    col0 INT4 NOT NULL, col1 NAME NOT NULL, col2 INET NULL, col3 FLOAT8 NOT NULL, col4 BOOL, col5 UUID NULL, col6 INET NOT NULL,
    FAMILY fam0 (col6, col5, col0, col2, col4, col1, col3),
    PRIMARY KEY (col6 DESC, col3, col2 DESC, col5)
);

CREATE TABLE table4 (
    col0  BOOL NULL,
    col1  UUID NOT NULL,
    col2  DATE NOT NULL,
    col3  DATE NULL,
    col4  INT2 NULL,
    col5  INT8,
    col6  STRING NULL,
    col7  REGNAMESPACE NOT NULL,
    col8  REGPROCEDURE,
    col9  INT2 NULL,
    col10 BYTES,
    col11 UUID NOT NULL,
    col12 BOOL,
    col13 INT4 NULL,
    col14 REGPROC NOT NULL,
    col15 STRING NOT NULL,
    FAMILY fam0 (col3, col1),
    FAMILY fam1 (col4, col11, col12, col14),
    FAMILY fam2 (col7),
    FAMILY fam3 (col9, col0, col2, col13, col6, col15, col5, col10, col8),
    PRIMARY KEY (col3),
    UNIQUE (col12 ASC, col1, col15 DESC, col5),
    UNIQUE (col8 DESC, col14, col1 DESC, col10 ASC, col13, col3 ASC, col12 DESC, col6 ASC, col2),
    INDEX (col13 ASC, col12, col7 ASC, col11 ASC, col1, col3, col6 DESC, col4 ASC, col2 DESC, col14 ASC, col10 ASC, col5 DESC, col0 DESC, col8, col9 ASC),
    UNIQUE (col4, col12 ASC, col15, col2 DESC, col3 ASC, col5 ASC, col0 DESC, col8 ASC, col1, col7, col6, col11 DESC, col10 ASC)
);

  SELECT B'01000000000101110110000110011100111101' AS col_35227
    FROM defaultdb.public.table8 AS tab_10859,
         defaultdb.public.table7 AS tab_10860,
         defaultdb.public.table6 AS tab_10861
         CROSS JOIN defaultdb.public.tab_7371 AS tab_10862
         FULL JOIN defaultdb.public.table4 AS tab_10863 ON false
   WHERE tab_10863.col12
GROUP BY tab_10860.col8, tab_10863.col12, tab_10861.col1, tab_10859.col0
  HAVING bool_or(tab_10863.col0::BOOL)::BOOL
ORDER BY tab_10863.col12 ASC
   LIMIT 21:::INT8;

@maddyblue
Copy link
Contributor Author

Ok super small repro:

SELECT
    1
FROM
    (
        VALUES
            (true, NULL, B'001000101101110'),
            (true, e'19\x1e':::STRING, NULL)
    )
        AS t (_bool, _string, _bit)
GROUP BY
    _string, _bit
HAVING
    min(_bool);

@rytaft
Copy link
Collaborator

rytaft commented May 29, 2019

Nice find! Thanks for the repro. Looking into this now.

rytaft added a commit to rytaft/cockroach that referenced this issue May 29, 2019
This commit fixes an issue where both the estimated distinct and null
counts could be zero. This was happening because the statistics code for
Select expressions was setting the null count to 0 for columns that
had null-rejecting filters. If the estimated distinct count for those
columns was also zero, the result was that both counts would be zero.

This commit changes the logic so that the null count is now transferred
to the distinct count if necessary to ensure that at least one is non-zero.

Fixes cockroachdb#37754

Release note: None
rytaft added a commit to rytaft/cockroach that referenced this issue May 29, 2019
This commit fixes an issue where both the estimated distinct and null
counts could be zero. This was happening because the statistics code for
Select expressions was setting the null count to 0 for columns that
had null-rejecting filters. If the estimated distinct count for those
columns was also zero, the result was that both counts would be zero.

This commit changes the logic so that the null count is now transferred
to the distinct count if necessary to ensure that at least one is non-zero.

Fixes cockroachdb#37754

Release note: None
craig bot pushed a commit that referenced this issue May 29, 2019
37913: opt: fix error due to distinct and/or null count must be non-zero r=rytaft a=rytaft

This commit fixes an issue where both the estimated distinct and null
counts could be zero. This was happening because the statistics code for
Select expressions was setting the null count to 0 for columns that
had null-rejecting filters. If the estimated distinct count for those
columns was also zero, the result was that both counts would be zero.

This commit changes the logic so that the null count is now transferred
to the distinct count if necessary to ensure that at least one is non-zero.

Fixes #37754

Release note: None

Co-authored-by: Rebecca Taft <[email protected]>
@craig craig bot closed this as completed in #37913 May 29, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior. O-sqlsmith
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants