@@ -19,6 +19,7 @@ import (
1919
2020 "github.com/google/uuid"
2121 "github.com/stretchr/testify/require"
22+ "github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Issue"
2223
2324 "github.com/ydb-platform/ydb-go-sdk/v3"
2425 "github.com/ydb-platform/ydb-go-sdk/v3/internal/decimal"
@@ -771,3 +772,230 @@ func TestIssue1785FillDecimalFields(t *testing.T) {
771772 require .EqualValues (t , expectedVal , rd .DecimalVal )
772773 })
773774}
775+
776+ // https://github.com/ydb-platform/ydb-go-sdk/issues/1872
777+ func TestIssue1872QueryWarning (t * testing.T ) {
778+ ctx , cancel := context .WithCancel (xtest .Context (t ))
779+ defer cancel ()
780+ db , err := ydb .Open (ctx ,
781+ os .Getenv ("YDB_CONNECTION_STRING" ),
782+ ydb .WithAccessTokenCredentials (os .Getenv ("YDB_ACCESS_TOKEN_CREDENTIALS" )),
783+ ydb .WithTraceQuery (
784+ log .Query (
785+ log .Default (os .Stdout ,
786+ log .WithLogQuery (),
787+ log .WithColoring (),
788+ log .WithMinLevel (log .INFO ),
789+ ),
790+ trace .QueryEvents ,
791+ ),
792+ ),
793+ )
794+ require .NoError (t , err )
795+ _ = db .Query ().Exec (ctx ,
796+ `drop table TestIssue1872QueryWarning;` ,
797+ )
798+ err = db .Query ().Exec (ctx ,
799+ `create table TestIssue1872QueryWarning
800+ (Id uint64, Amount decimal(22,9) , primary key(Id));` ,
801+ query .WithParameters (
802+ ydb .ParamsBuilder ().
803+ Param ("$p1" ).Text ("test1" ).
804+ Build (),
805+ ),
806+ )
807+ require .NoError (t , err )
808+ t .Run ("Query with declare" , func (t * testing.T ) {
809+ collector := make ([]* Ydb_Issue.IssueMessage , 0 )
810+ q := db .Query ()
811+ _ , err := q .Query (ctx , `
812+ DECLARE $x as String;
813+ SELECT 42;
814+ SELECT 43;
815+ ` ,
816+ query .WithSyntax (query .SyntaxYQL ),
817+ query .WithIdempotent (),
818+ query .WithIssuesHandler (func (issueList []* Ydb_Issue.IssueMessage ) {
819+ collector = append (collector , issueList ... )
820+ }),
821+ )
822+ require .NoError (t , err )
823+ require .Equal (t , 1 , len (collector ))
824+ require .Equal (t , "Symbol $x is not used" , collector [0 ].Message )
825+ })
826+ t .Run ("Exec with declare" , func (t * testing.T ) {
827+ collector := make ([]* Ydb_Issue.IssueMessage , 0 )
828+ q := db .Query ()
829+ _ , err := q .Query (ctx , `
830+ DECLARE $x as String;
831+ SELECT 42;
832+ SELECT 43;
833+ ` ,
834+ query .WithSyntax (query .SyntaxYQL ),
835+ query .WithIdempotent (),
836+ query .WithIssuesHandler (func (issueList []* Ydb_Issue.IssueMessage ) {
837+ collector = append (collector , issueList ... )
838+ }),
839+ )
840+ require .NoError (t , err )
841+ require .Equal (t , 1 , len (collector ))
842+ require .Equal (t , "Symbol $x is not used" , collector [0 ].Message )
843+ })
844+ issueCount := - 1
845+ t .Run ("Query no issues" , func (t * testing.T ) {
846+ q := db .Query ()
847+ _ , err := q .Query (ctx , `
848+ SELECT 42;
849+ SELECT 43;
850+ ` ,
851+ query .WithSyntax (query .SyntaxYQL ),
852+ query .WithIdempotent (),
853+ query .WithIssuesHandler (func (issueList []* Ydb_Issue.IssueMessage ) {
854+ issueCount = len (issueList )
855+ }),
856+ )
857+ require .NoError (t , err )
858+ })
859+ require .Equal (t , - 1 , issueCount )
860+ issueCount = - 1
861+ t .Run ("Exec no issues" , func (t * testing.T ) {
862+ q := db .Query ()
863+ _ , err := q .Query (ctx , `
864+ SELECT 42;
865+ SELECT 43;
866+ ` ,
867+ query .WithSyntax (query .SyntaxYQL ),
868+ query .WithIdempotent (),
869+ query .WithIssuesHandler (func (issueList []* Ydb_Issue.IssueMessage ) {
870+ issueCount = len (issueList )
871+ }),
872+ )
873+ require .NoError (t , err )
874+ })
875+ require .Equal (t , - 1 , issueCount )
876+ t .Run ("Exec insert" , func (t * testing.T ) {
877+ var issueList []* Ydb_Issue.IssueMessage
878+ q := db .Query ()
879+ err := q .Exec (ctx , `
880+ insert into TestIssue1872QueryWarning (Id, Amount)
881+ values (-7, Decimal("37.01",22,9));
882+ ` ,
883+ query .WithIssuesHandler (func (issues []* Ydb_Issue.IssueMessage ) {
884+ issueList = issues
885+ }),
886+ )
887+ require .NoError (t , err )
888+ require .Equal (t , 1 , len (issueList ))
889+ })
890+
891+ t .Run ("Exec complex" , func (t * testing.T ) {
892+ collector := make ([]* Ydb_Issue.IssueMessage , 0 )
893+ err = db .Query ().Exec (ctx ,
894+ `DECLARE $x as String;
895+ DECLARE $x1 as String;
896+ SELECT 42;
897+ insert into TestIssue1872QueryWarning (Id, Amount) values (-3, Decimal("3.01",22,9));
898+ SELECT 43;` ,
899+ query .WithParameters (
900+ ydb .ParamsBuilder ().
901+ Param ("$p1" ).Text ("test1" ).
902+ Build (),
903+ ),
904+ query .WithIssuesHandler (func (issueList []* Ydb_Issue.IssueMessage ) {
905+ collector = append (collector , issueList ... )
906+ }),
907+ )
908+ require .NoError (t , err )
909+ require .Equal (t , 3 , len (collector ))
910+ require .Equal (t , "Symbol $x is not used" , collector [0 ].Message )
911+ require .Equal (t , "Symbol $x1 is not used" , collector [1 ].Message )
912+ require .Equal (t , "Type annotation" , collector [2 ].Message )
913+ require .Equal (t , 1 , len (collector [2 ].Issues ))
914+ require .Equal (t , "At function: KiWriteTable!" , collector [2 ].Issues [0 ].Message )
915+ require .Equal (t ,
916+ "Failed to convert type: Struct<'Amount':Decimal(22,9),'Id':Int32> to Struct<'Amount':Decimal(22,9)?,'Id':Uint64?>" ,
917+ collector [2 ].Issues [0 ].Issues [0 ].Message )
918+ })
919+ t .Run ("Query complex" , func (t * testing.T ) {
920+ collector := make ([]* Ydb_Issue.IssueMessage , 0 )
921+ err = db .Query ().Exec (ctx ,
922+ ` DECLARE $x as String;
923+ DECLARE $x1 as String;
924+ SELECT 42;
925+ insert into TestIssue1872QueryWarning (Id, Amount) values (-6, Decimal("3.01",22,9));
926+ SELECT 43;` ,
927+ query .WithParameters (
928+ ydb .ParamsBuilder ().
929+ Param ("$p1" ).Text ("test1" ).
930+ Build (),
931+ ),
932+ query .WithIssuesHandler (func (issueList []* Ydb_Issue.IssueMessage ) {
933+ collector = append (collector , issueList ... )
934+ }),
935+ )
936+ require .NoError (t , err )
937+ require .Equal (t , 3 , len (collector ))
938+ require .Equal (t , "Symbol $x is not used" , collector [0 ].Message )
939+ require .Equal (t , "Symbol $x1 is not used" , collector [1 ].Message )
940+ require .Equal (t , "Type annotation" , collector [2 ].Message )
941+ require .Equal (t , 1 , len (collector [2 ].Issues ))
942+ require .Equal (t , "At function: KiWriteTable!" , collector [2 ].Issues [0 ].Message )
943+ require .Equal (t ,
944+ "Failed to convert type: Struct<'Amount':Decimal(22,9),'Id':Int32> to Struct<'Amount':Decimal(22,9)?,'Id':Uint64?>" ,
945+ collector [2 ].Issues [0 ].Issues [0 ].Message )
946+ })
947+ t .Run ("Query 2 inserts" , func (t * testing.T ) {
948+ var issueList []* Ydb_Issue.IssueMessage
949+ q := db .Query ()
950+ _ , err := q .Query (ctx , `
951+ insert into TestIssue1872QueryWarning (Id, Amount) values (-9, Decimal("3.01",22,9));
952+ insert into TestIssue1872QueryWarning (Id, Amount) values (-5, Decimal("5.01",22,9));
953+ ` ,
954+ query .WithParameters (
955+ ydb .ParamsBuilder ().
956+ Param ("$p1" ).Text ("test" ).
957+ Build (),
958+ ),
959+ query .WithSyntax (query .SyntaxYQL ),
960+ query .WithIdempotent (),
961+ query .WithIssuesHandler (func (issues []* Ydb_Issue.IssueMessage ) {
962+ issueList = issues
963+ }),
964+ )
965+ require .NoError (t , err )
966+ require .Equal (t , 1 , len (issueList ))
967+ require .Equal (t , "Type annotation" , issueList [0 ].Message )
968+ require .Equal (t , 2 , len (issueList [0 ].Issues ))
969+ require .Equal (t , "At function: KiWriteTable!" , issueList [0 ].Issues [0 ].Message )
970+ require .Equal (t ,
971+ "Failed to convert type: Struct<'Amount':Decimal(22,9),'Id':Int32> to Struct<'Amount':Decimal(22,9)?,'Id':Uint64?>" ,
972+ issueList [0 ].Issues [0 ].Issues [0 ].Message )
973+ })
974+ t .Run ("Exec 2 inserts" , func (t * testing.T ) {
975+ var issueList []* Ydb_Issue.IssueMessage
976+ q := db .Query ()
977+ _ , err := q .Query (ctx , `
978+ insert into TestIssue1872QueryWarning (Id, Amount) values (-19, Decimal("3.01",22,9));
979+ insert into TestIssue1872QueryWarning (Id, Amount) values (-15, Decimal("5.01",22,9));
980+ ` ,
981+ query .WithParameters (
982+ ydb .ParamsBuilder ().
983+ Param ("$p1" ).Text ("test" ).
984+ Build (),
985+ ),
986+ query .WithSyntax (query .SyntaxYQL ),
987+ query .WithIdempotent (),
988+ query .WithIssuesHandler (func (issues []* Ydb_Issue.IssueMessage ) {
989+ issueList = issues
990+ }),
991+ )
992+ require .NoError (t , err )
993+ require .Equal (t , 1 , len (issueList ))
994+ require .Equal (t , "Type annotation" , issueList [0 ].Message )
995+ require .Equal (t , 2 , len (issueList [0 ].Issues ))
996+ require .Equal (t , "At function: KiWriteTable!" , issueList [0 ].Issues [0 ].Message )
997+ require .Equal (t ,
998+ "Failed to convert type: Struct<'Amount':Decimal(22,9),'Id':Int32> to Struct<'Amount':Decimal(22,9)?,'Id':Uint64?>" ,
999+ issueList [0 ].Issues [0 ].Issues [0 ].Message )
1000+ })
1001+ }
0 commit comments