[
https://issues.apache.org/jira/browse/DERBY-7134?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17503649#comment-17503649
]
Richard N. Hillegas commented on DERBY-7134:
--------------------------------------------
With that table definition, the MERGE statement does not even compile for me.
The following script...
{noformat}
CONNECT 'jdbc:derby:memory:db;create=true';
CREATE TABLE HUND
(
id INTEGER GENERATED ALWAYS AS IDENTITY(Start with 1, Increment by 1),
name VARCHAR(100) NOT NULL,
wurfdatum DATE NOT NULL,
zwinger VARCHAR(100),
zbn VARCHAR(100) NOT NULL,
CONSTRAINT PK_HUND PRIMARY KEY (id),
constraint uk_hund unique (name)
);
MERGE INTO HUND USING SYSIBM.SYSDUMMY1 ON HUND.name='name'
WHEN MATCHED THEN UPDATE SET zwinger='ZW',zbn='zb'
WHEN NOT MATCHED THEN INSERT (name,zwinger,zbn) VALUES('a','zw','zb')
;
{noformat}
...produces the following output...
{noformat}
ij version 10.16
ij> CONNECT 'jdbc:derby:memory:db;create=true';
ij> CREATE TABLE HUND
(
id INTEGER GENERATED ALWAYS AS IDENTITY(Start with 1, Increment by 1),
name VARCHAR(100) NOT NULL,
wurfdatum DATE NOT NULL,
zwinger VARCHAR(100),
zbn VARCHAR(100) NOT NULL,
CONSTRAINT PK_HUND PRIMARY KEY (id),
constraint uk_hund unique (name)
);
0 rows inserted/updated/deleted
ij> MERGE INTO HUND USING SYSIBM.SYSDUMMY1 ON HUND.name='name'
WHEN MATCHED THEN UPDATE SET zwinger='ZW',zbn='zb'
WHEN NOT MATCHED THEN INSERT (name,zwinger,zbn) VALUES('a','zw','zb')
;
ERROR 23502: Column 'WURFDATUM' cannot accept a NULL value.
{noformat}
The error looks correct to me. The INSERT branch of the MERGE statement
defaults wurfdatum to NULL, which violates the NOT NULL constraint on the
column.
I modified the MERGE statement to INSERT CURRENT_DATE into wurfdatum and
expanded the script so that it ran the experiment against both a local embedded
database and against a remote, network-accessed database:
{noformat}
CONNECT 'jdbc:derby:memory:db;create=true';
CREATE TABLE HUND
(
id INTEGER GENERATED ALWAYS AS IDENTITY(Start with 1, Increment by 1),
name VARCHAR(100) NOT NULL,
wurfdatum DATE NOT NULL,
zwinger VARCHAR(100),
zbn VARCHAR(100) NOT NULL,
CONSTRAINT PK_HUND PRIMARY KEY (id),
constraint uk_hund unique (name)
);
MERGE INTO HUND USING SYSIBM.SYSDUMMY1 ON HUND.name='name'
WHEN MATCHED THEN UPDATE SET zwinger='ZW',zbn='zb'
WHEN NOT MATCHED THEN INSERT (name,zwinger,zbn,wurfdatum)
VALUES('a','zw','zb', CURRENT_DATE)
;
CONNECT 'jdbc:derby://localhost:8246/memory:remote_db;create=true';
CREATE TABLE HUND
(
id INTEGER GENERATED ALWAYS AS IDENTITY(Start with 1, Increment by 1),
name VARCHAR(100) NOT NULL,
wurfdatum DATE NOT NULL,
zwinger VARCHAR(100),
zbn VARCHAR(100) NOT NULL,
CONSTRAINT PK_HUND PRIMARY KEY (id),
constraint uk_hund unique (name)
);
MERGE INTO HUND USING SYSIBM.SYSDUMMY1 ON HUND.name='name'
WHEN MATCHED THEN UPDATE SET zwinger='ZW',zbn='zb'
WHEN NOT MATCHED THEN INSERT (name,zwinger,zbn,wurfdatum)
VALUES('a','zw','zb', CURRENT_DATE)
;
{noformat}
The modified script ran correctly against both databases.
I ran these experiments with clients and servers both running Java 11. I tried
the experiment both with the Derby trunk release (10.16) and with Derby
10.15.2.0. The results were consistent across Derby releases.
What happens when you run these experiments? Thanks.
> MERGE not Working over Nework
> -----------------------------
>
> Key: DERBY-7134
> URL: https://issues.apache.org/jira/browse/DERBY-7134
> Project: Derby
> Issue Type: Bug
> Components: Network Client
> Affects Versions: 10.15.2.0
> Environment: Windows , Derby
> Reporter: Thomas Lußnig
> Priority: Major
>
> I Receive an error after sending Merge Statement via Netowrk to derby network
> server.
> The error was first mentioned 5 Years ago:
> *
> [https://stackoverflow.com/questions/41587515/derby-merge-statement-results-in-insufficient-data-while-reading-from-the-netwo]
> And is till now active in derby.
> SQL-Fehler: Unzureichende Daten beim Lesen aus dem Netz. Erwartet wurden
> mindestens 21.272 Byte, empfangen wurden jedoch nur 0 Byte. Die Verbindung
> wurde beendet.
> MERGE INTO HUND USING SYSIBM.SYSDUMMY1 ON HUND.name='name'
> WHEN MATCHED THEN UPDATE SET zwinger='ZW',zbn='zb'
> WHEN NOT MATCHED THEN INSERT (name,zwinger,zbn)VALUES('a','zw','zb')
> ;
> Tue Mar 08 07:23:32 CET 2022 : Cannot invoke "String.length()" because
> "<parameter1>" is null
> java.lang.NullPointerException: Cannot invoke "String.length()" because
> "<parameter1>" is null
> at
> org.apache.derby.impl.drda.DDMWriter.maxEncodedLength(DDMWriter.java:1138)
> at org.apache.derby.impl.drda.DDMWriter.writeString(DDMWriter.java:1252)
> at
> org.apache.derby.impl.drda.DRDAConnThread.writeSQLCAGRP(DRDAConnThread.java:6338)
> at
> org.apache.derby.impl.drda.DRDAConnThread.writeSQLCARD(DRDAConnThread.java:6167)
> at
> org.apache.derby.impl.drda.DRDAConnThread.writeSQLCARDs(DRDAConnThread.java:6109)
> at
> org.apache.derby.impl.drda.DRDAConnThread.processCommands(DRDAConnThread.java:836)
> at org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:300)
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)