SUM() of a negated typed NULL fails with "SUM or AVG on wrong data type"; CREATE TABLE AS gives the column data type NULL
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #4437 di @aadrian — integrata
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
The issue identifies UnaryOperation.optimize() and BinaryOperation.optimize() as the entry points. Read how constant folding handles a NULL result and how TypedValueExpression.getTypedIfNull(value, type) preserves its type; check nearby tests for expression typing, then run the relevant tests. Done means negated and binary-operation typed NULLs retain their type in aggregates and CREATE TABLE AS, without regressing the working cases. A linked pull request is already open.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
CREATE TABLE sales(region VARCHAR(10), amount DECIMAL(12, 2));
INSERT INTO sales VALUES ('EU', 100.50), ('US', 20.00);
SELECT region, SUM(amount) AS revenue FROM sales GROUP BY region;
-- works
SELECT region, SUM(-CAST(NULL AS DECIMAL(12, 2))) AS refunds FROM sales GROUP BY region;
-- SUM or AVG on wrong data type for "SUM(NULL)" [90015-259]
-- SUM(CAST(NULL AS DECIMAL(12, 2))) works and returns NULL
The type is also lost when the value is stored:
CREATE TABLE report AS
SELECT region, -CAST(NULL AS DECIMAL(12, 2)) AS refunds FROM sales;
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'REPORT';
-- REGION CHARACTER VARYING
-- REFUNDS NULL (expected NUMERIC(12, 2))
Binary operators do the same: SUM(0 - CAST(NULL AS DECIMAL(12, 2))), SUM(CAST(NULL AS DECIMAL(12, 2)) + 1) and SUM(CAST(NULL AS DECIMAL(12, 2)) * 2) fail alike. SUM(ABS(CAST(NULL AS DECIMAL(12, 2)))) works.
UnaryOperation.optimize() and BinaryOperation.optimize() fold a constant argument with ValueExpression.get(getValue(session)). A NULL result becomes an untyped NULL. TypedValueExpression.getTypedIfNull(value, type) keeps the type.
Seen on 2.5.259-SNAPSHOT (master) and 2.5.252.
- Lingua principale
- Java
- Stelle
- 4.6k
- Fork
- 1.3k
- Merge medio
- 1g 8h
- PR unite (30g)
- 33
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di h2database/h2database
-
It's not necessary to copy the memory block in the readWrite() of org.h2.store.fs.mem.FileMemDataAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
h2database/h2database#4435 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
h2database/h2database#4445 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 66/100
h2database/h2database#4444 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
h2database/h2database#4425 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
BUG: Parenthesized UNION term returns stale result when only its FETCH / OFFSET / ORDER BY parameter changesForse già presa @kalayciburak l’ha presa 10 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 76/100
h2database/h2database#4421 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di h2database/h2database
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
apache/rocketmq-dashboard#5784 ·
I maintainer di solito rispondono entro 3 giorni
-
[i18n] 安装实例完成后的成功提示未正确本地化Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
PCL-Community/PCL-CE#3658 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Team/Identity Server Core Type/Improvement U2
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
wso2/product-is#28553 ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature]: Page CreationApertafrontend
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
Paul-Austin-Oswego-CSC480-HCI521/gift-app#116 ·
I maintainer di solito rispondono entro 2 giorni