@@ -128,11 +128,6 @@ private String scanSelectByKey(String column) throws SQLException {
128128 return QueryType .SCAN_QUERY .getPrefix () + "\n " + sql ;
129129 }
130130
131- private YdbPreparedStatement prepareUpsertValues () throws SQLException {
132- return jdbc .connection ().prepareStatement (SqlQueries .namedUpsertSQL (TEST_TABLE_NAME ))
133- .unwrap (YdbPreparedStatement .class );
134- }
135-
136131 private YdbPreparedStatement prepareSelectAll () throws SQLException {
137132 return jdbc .connection ().prepareStatement (TEST_TABLE .selectSQL ())
138133 .unwrap (YdbPreparedStatement .class );
@@ -487,9 +482,11 @@ public void executeExplainQueryExplicitly(SqlQueries.YqlQuery mode) throws SQLEx
487482 }
488483 }
489484
490- @ Test
491- public void testSetNull () throws SQLException {
492- try (YdbPreparedStatement ps = prepareUpsertValues ()) {
485+ @ ParameterizedTest (name = "with {0}" )
486+ @ EnumSource (value = SqlQueries .YqlQuery .class )
487+ public void testSetNull (SqlQueries .YqlQuery mode ) throws SQLException {
488+ String yql = TEST_TABLE .namedUpsertAll (mode );
489+ try (YdbPreparedStatement ps = jdbc .connection ().unwrap (YdbConnection .class ).prepareStatement (yql )) {
493490 ps .setInt ("key" , 1 );
494491 YdbTypes types = ps .getConnection ().getYdbTypes ();
495492 ps .setNull ("c_Bool" , types .wrapYdbJdbcType (PrimitiveType .Bool ));
@@ -517,7 +514,7 @@ public void testSetNull() throws SQLException {
517514 ps .executeUpdate ();
518515 }
519516
520- try (YdbPreparedStatement ps = prepareUpsertValues ( )) {
517+ try (YdbPreparedStatement ps = jdbc . connection (). unwrap ( YdbConnection . class ). prepareStatement ( yql )) {
521518 ps .setInt ("key" , 2 );
522519 ps .setNull ("c_Bool" , -1 , "Bool" );
523520 ps .setNull ("c_Int8" , -1 , "Int8" );
@@ -544,7 +541,7 @@ public void testSetNull() throws SQLException {
544541 ps .executeUpdate ();
545542 }
546543
547- try (YdbPreparedStatement ps = prepareUpsertValues ( )) {
544+ try (YdbPreparedStatement ps = jdbc . connection (). unwrap ( YdbConnection . class ). prepareStatement ( yql )) {
548545 ps .setInt ("key" , 3 );
549546 ps .setNull ("c_Bool" , -1 );
550547 ps .setNull ("c_Int8" , -1 );
@@ -590,9 +587,11 @@ public void testSetNull() throws SQLException {
590587 }
591588 }
592589
593- @ Test
594- public void testParametersMeta () throws SQLException {
595- try (YdbPreparedStatement ps = prepareUpsertValues ()) {
590+ @ ParameterizedTest (name = "with {0}" )
591+ @ EnumSource (value = SqlQueries .YqlQuery .class )
592+ public void testParametersMeta (SqlQueries .YqlQuery mode ) throws SQLException {
593+ String yql = TEST_TABLE .namedUpsertAll (mode );
594+ try (YdbPreparedStatement ps = jdbc .connection ().unwrap (YdbConnection .class ).prepareStatement (yql )) {
596595 final ParameterMetaData meta = ps .getParameterMetaData ();
597596 final YdbParameterMetaData ydbMeta = meta .unwrap (YdbParameterMetaData .class );
598597
@@ -603,6 +602,7 @@ public void testParametersMeta() throws SQLException {
603602 Assertions .assertEquals (22 , meta .getParameterCount ());
604603 for (int param = 1 ; param <= meta .getParameterCount (); param ++) {
605604 String name = ydbMeta .getParameterName (param );
605+ boolean isKey = "key" .equals (name );
606606
607607 Assertions .assertFalse (meta .isSigned (param ), "All params are not isSigned" );
608608 Assertions .assertEquals (0 , meta .getPrecision (param ), "No precision available" );
@@ -613,14 +613,15 @@ public void testParametersMeta() throws SQLException {
613613 int type = meta .getParameterType (param );
614614 Assertions .assertTrue (type != 0 , "All params have sql type, including " + name );
615615
616- if (name .equals ("$key" )) {
617- continue ;
616+ if (isKey ) {
617+ Assertions .assertEquals (ParameterMetaData .parameterNoNulls , meta .isNullable (param ),
618+ "Primary key defined as not nullable" );
619+ } else {
620+ Assertions .assertEquals (ParameterMetaData .parameterNullable , meta .isNullable (param ),
621+ "All parameters expect primary key defined as nullable, including " + name );
618622 }
619623
620- Assertions .assertEquals (ParameterMetaData .parameterNullable , meta .isNullable (param ),
621- "All parameters expect primary key defined as nullable, including " + name );
622-
623- String expectType = name .substring ("$c_" .length ()).toLowerCase ();
624+ String expectType = isKey ? "int32" : name .substring ("c_" .length ()).toLowerCase ();
624625 if (expectType .equals ("decimal" )) {
625626 expectType += "(22, 9)" ;
626627 }
@@ -632,54 +633,54 @@ public void testParametersMeta() throws SQLException {
632633
633634 String expectClassName ;
634635 switch (name ) {
635- case "$key" :
636- case "$c_Bool" :
636+ case "c_Bool" :
637637 expectClassName = Boolean .class .getName ();
638638 break ;
639- case "$ c_Int8" :
639+ case "c_Int8" :
640640 expectClassName = Byte .class .getName ();
641641 break ;
642- case "$ c_Int16" :
642+ case "c_Int16" :
643643 expectClassName = Short .class .getName ();
644644 break ;
645- case "$c_Int32" :
646- case "$c_Uint8" :
647- case "$c_Uint16" :
645+ case "key" :
646+ case "c_Int32" :
647+ case "c_Uint8" :
648+ case "c_Uint16" :
648649 expectClassName = Integer .class .getName ();
649650 break ;
650- case "$ c_Int64" :
651- case "$ c_Uint64" :
652- case "$ c_Uint32" :
651+ case "c_Int64" :
652+ case "c_Uint64" :
653+ case "c_Uint32" :
653654 expectClassName = Long .class .getName ();
654655 break ;
655- case "$ c_Float" :
656+ case "c_Float" :
656657 expectClassName = Float .class .getName ();
657658 break ;
658- case "$ c_Double" :
659+ case "c_Double" :
659660 expectClassName = Double .class .getName ();
660661 break ;
661- case "$ c_Text" :
662- case "$ c_Json" :
663- case "$ c_JsonDocument" :
662+ case "c_Text" :
663+ case "c_Json" :
664+ case "c_JsonDocument" :
664665 expectClassName = String .class .getName ();
665666 break ;
666- case "$ c_Bytes" :
667- case "$ c_Yson" :
667+ case "c_Bytes" :
668+ case "c_Yson" :
668669 expectClassName = byte [].class .getName ();
669670 break ;
670- case "$ c_Date" :
671+ case "c_Date" :
671672 expectClassName = LocalDate .class .getName ();
672673 break ;
673- case "$ c_Datetime" :
674+ case "c_Datetime" :
674675 expectClassName = LocalDateTime .class .getName ();
675676 break ;
676- case "$ c_Timestamp" :
677+ case "c_Timestamp" :
677678 expectClassName = Instant .class .getName ();
678679 break ;
679- case "$ c_Interval" :
680+ case "c_Interval" :
680681 expectClassName = Duration .class .getName ();
681682 break ;
682- case "$ c_Decimal" :
683+ case "c_Decimal" :
683684 expectClassName = DecimalValue .class .getName ();
684685 break ;
685686 default :
0 commit comments