@@ -5153,6 +5153,99 @@ fn test_escaped_string_literal() {
51535153 }
51545154}
51555155
5156+ #[ test]
5157+ fn parse_create_domain ( ) {
5158+ let sql1 = "CREATE DOMAIN my_domain AS INTEGER CHECK (VALUE > 0)" ;
5159+ let expected = Statement :: CreateDomain ( CreateDomain {
5160+ name : ObjectName :: from ( vec ! [ Ident :: new( "my_domain" ) ] ) ,
5161+ data_type : DataType :: Integer ( None ) ,
5162+ collation : None ,
5163+ default : None ,
5164+ constraints : vec ! [ TableConstraint :: Check {
5165+ name: None ,
5166+ expr: Box :: new( Expr :: BinaryOp {
5167+ left: Box :: new( Expr :: Identifier ( Ident :: new( "VALUE" ) ) ) ,
5168+ op: BinaryOperator :: Gt ,
5169+ right: Box :: new( Expr :: Value ( test_utils:: number( "0" ) . into( ) ) ) ,
5170+ } ) ,
5171+ } ] ,
5172+ } ) ;
5173+
5174+ assert_eq ! ( pg( ) . verified_stmt( sql1) , expected) ;
5175+
5176+ let sql2 = "CREATE DOMAIN my_domain AS INTEGER COLLATE \" en_US\" CHECK (VALUE > 0)" ;
5177+ let expected = Statement :: CreateDomain ( CreateDomain {
5178+ name : ObjectName :: from ( vec ! [ Ident :: new( "my_domain" ) ] ) ,
5179+ data_type : DataType :: Integer ( None ) ,
5180+ collation : Some ( Ident :: with_quote ( '"' , "en_US" ) ) ,
5181+ default : None ,
5182+ constraints : vec ! [ TableConstraint :: Check {
5183+ name: None ,
5184+ expr: Box :: new( Expr :: BinaryOp {
5185+ left: Box :: new( Expr :: Identifier ( Ident :: new( "VALUE" ) ) ) ,
5186+ op: BinaryOperator :: Gt ,
5187+ right: Box :: new( Expr :: Value ( test_utils:: number( "0" ) . into( ) ) ) ,
5188+ } ) ,
5189+ } ] ,
5190+ } ) ;
5191+
5192+ assert_eq ! ( pg( ) . verified_stmt( sql2) , expected) ;
5193+
5194+ let sql3 = "CREATE DOMAIN my_domain AS INTEGER DEFAULT 1 CHECK (VALUE > 0)" ;
5195+ let expected = Statement :: CreateDomain ( CreateDomain {
5196+ name : ObjectName :: from ( vec ! [ Ident :: new( "my_domain" ) ] ) ,
5197+ data_type : DataType :: Integer ( None ) ,
5198+ collation : None ,
5199+ default : Some ( Expr :: Value ( test_utils:: number ( "1" ) . into ( ) ) ) ,
5200+ constraints : vec ! [ TableConstraint :: Check {
5201+ name: None ,
5202+ expr: Box :: new( Expr :: BinaryOp {
5203+ left: Box :: new( Expr :: Identifier ( Ident :: new( "VALUE" ) ) ) ,
5204+ op: BinaryOperator :: Gt ,
5205+ right: Box :: new( Expr :: Value ( test_utils:: number( "0" ) . into( ) ) ) ,
5206+ } ) ,
5207+ } ] ,
5208+ } ) ;
5209+
5210+ assert_eq ! ( pg( ) . verified_stmt( sql3) , expected) ;
5211+
5212+ let sql4 = "CREATE DOMAIN my_domain AS INTEGER COLLATE \" en_US\" DEFAULT 1 CHECK (VALUE > 0)" ;
5213+ let expected = Statement :: CreateDomain ( CreateDomain {
5214+ name : ObjectName :: from ( vec ! [ Ident :: new( "my_domain" ) ] ) ,
5215+ data_type : DataType :: Integer ( None ) ,
5216+ collation : Some ( Ident :: with_quote ( '"' , "en_US" ) ) ,
5217+ default : Some ( Expr :: Value ( test_utils:: number ( "1" ) . into ( ) ) ) ,
5218+ constraints : vec ! [ TableConstraint :: Check {
5219+ name: None ,
5220+ expr: Box :: new( Expr :: BinaryOp {
5221+ left: Box :: new( Expr :: Identifier ( Ident :: new( "VALUE" ) ) ) ,
5222+ op: BinaryOperator :: Gt ,
5223+ right: Box :: new( Expr :: Value ( test_utils:: number( "0" ) . into( ) ) ) ,
5224+ } ) ,
5225+ } ] ,
5226+ } ) ;
5227+
5228+ assert_eq ! ( pg( ) . verified_stmt( sql4) , expected) ;
5229+
5230+ let sql5 = "CREATE DOMAIN my_domain AS INTEGER CONSTRAINT my_constraint CHECK (VALUE > 0)" ;
5231+ let expected = Statement :: CreateDomain ( CreateDomain {
5232+ name : ObjectName :: from ( vec ! [ Ident :: new( "my_domain" ) ] ) ,
5233+ data_type : DataType :: Integer ( None ) ,
5234+ collation : None ,
5235+ default : None ,
5236+ constraints : vec ! [ TableConstraint :: Check {
5237+ name: Some ( Ident :: new( "my_constraint" ) ) ,
5238+ expr: Box :: new( Expr :: BinaryOp {
5239+ left: Box :: new( Expr :: Identifier ( Ident :: new( "VALUE" ) ) ) ,
5240+ op: BinaryOperator :: Gt ,
5241+ right: Box :: new( Expr :: Value ( test_utils:: number( "0" ) . into( ) ) ) ,
5242+ } ) ,
5243+ } ] ,
5244+ } ) ;
5245+
5246+ assert_eq ! ( pg( ) . verified_stmt( sql5) , expected) ;
5247+ }
5248+
51565249#[ test]
51575250fn parse_create_simple_before_insert_trigger ( ) {
51585251 let sql = "CREATE TRIGGER check_insert BEFORE INSERT ON accounts FOR EACH ROW EXECUTE FUNCTION check_account_insert" ;
0 commit comments