@@ -8060,6 +8060,225 @@ fn parse_alter_operator_class() {
80608060 . is_err( ) ) ;
80618061}
80628062
8063+ #[ test]
8064+ fn parse_alter_function_and_aggregate ( ) {
8065+ for ( sql, expected) in [
8066+ (
8067+ "ALTER AGGREGATE alt_func1(int) RENAME TO alt_func3" ,
8068+ "ALTER AGGREGATE alt_func1(INT) RENAME TO alt_func3" ,
8069+ ) ,
8070+ (
8071+ "ALTER AGGREGATE alt_func1(int) OWNER TO regress_alter_generic_user3" ,
8072+ "ALTER AGGREGATE alt_func1(INT) OWNER TO regress_alter_generic_user3" ,
8073+ ) ,
8074+ (
8075+ "ALTER AGGREGATE alt_func1(int) SET SCHEMA alt_nsp2" ,
8076+ "ALTER AGGREGATE alt_func1(INT) SET SCHEMA alt_nsp2" ,
8077+ ) ,
8078+ (
8079+ "ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg2" ,
8080+ "ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg2" ,
8081+ ) ,
8082+ (
8083+ "ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg3" ,
8084+ "ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg3" ,
8085+ ) ,
8086+ (
8087+ "ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user2" ,
8088+ "ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user2" ,
8089+ ) ,
8090+ (
8091+ "ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user3" ,
8092+ "ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user3" ,
8093+ ) ,
8094+ (
8095+ "ALTER AGGREGATE alt_agg2(int) SET SCHEMA alt_nsp2" ,
8096+ "ALTER AGGREGATE alt_agg2(INT) SET SCHEMA alt_nsp2" ,
8097+ ) ,
8098+ (
8099+ "ALTER AGGREGATE alt_order(int ORDER BY text) RENAME TO alt_order2" ,
8100+ "ALTER AGGREGATE alt_order(INT ORDER BY TEXT) RENAME TO alt_order2" ,
8101+ ) ,
8102+ (
8103+ "ALTER AGGREGATE alt_order_only(ORDER BY int) SET SCHEMA alt_nsp2" ,
8104+ "ALTER AGGREGATE alt_order_only(ORDER BY INT) SET SCHEMA alt_nsp2" ,
8105+ ) ,
8106+ (
8107+ "ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2" ,
8108+ "ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2" ,
8109+ ) ,
8110+ ] {
8111+ let statement = pg_and_generic ( ) . one_statement_parses_to ( sql, expected) ;
8112+ assert ! ( matches!(
8113+ statement,
8114+ Statement :: AlterFunction ( AlterFunction {
8115+ kind: AlterFunctionKind :: Aggregate ,
8116+ ..
8117+ } )
8118+ ) ) ;
8119+ }
8120+
8121+ for ( sql, expected) in [
8122+ (
8123+ "ALTER FUNCTION alt_func1(int) RENAME TO alt_func2" ,
8124+ "ALTER FUNCTION alt_func1(INT) RENAME TO alt_func2" ,
8125+ ) ,
8126+ (
8127+ "ALTER FUNCTION alt_func1(int) RENAME TO alt_func3" ,
8128+ "ALTER FUNCTION alt_func1(INT) RENAME TO alt_func3" ,
8129+ ) ,
8130+ (
8131+ "ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user2" ,
8132+ "ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user2" ,
8133+ ) ,
8134+ (
8135+ "ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user3" ,
8136+ "ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user3" ,
8137+ ) ,
8138+ (
8139+ "ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp1" ,
8140+ "ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp1" ,
8141+ ) ,
8142+ (
8143+ "ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp2" ,
8144+ "ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp2" ,
8145+ ) ,
8146+ (
8147+ "ALTER FUNCTION alt_func2(int) DEPENDS ON EXTENSION ext1" ,
8148+ "ALTER FUNCTION alt_func2(INT) DEPENDS ON EXTENSION ext1" ,
8149+ ) ,
8150+ (
8151+ "ALTER FUNCTION alt_func2(int) NO DEPENDS ON EXTENSION ext1" ,
8152+ "ALTER FUNCTION alt_func2(INT) NO DEPENDS ON EXTENSION ext1" ,
8153+ ) ,
8154+ (
8155+ "ALTER FUNCTION alt_func2 IMMUTABLE" ,
8156+ "ALTER FUNCTION alt_func2 IMMUTABLE" ,
8157+ ) ,
8158+ (
8159+ "ALTER FUNCTION alt_func2(int) IMMUTABLE" ,
8160+ "ALTER FUNCTION alt_func2(INT) IMMUTABLE" ,
8161+ ) ,
8162+ (
8163+ "ALTER FUNCTION alt_func2(int) STABLE" ,
8164+ "ALTER FUNCTION alt_func2(INT) STABLE" ,
8165+ ) ,
8166+ (
8167+ "ALTER FUNCTION alt_func2(int) VOLATILE" ,
8168+ "ALTER FUNCTION alt_func2(INT) VOLATILE" ,
8169+ ) ,
8170+ (
8171+ "ALTER FUNCTION alt_func2(int) CALLED ON NULL INPUT" ,
8172+ "ALTER FUNCTION alt_func2(INT) CALLED ON NULL INPUT" ,
8173+ ) ,
8174+ (
8175+ "ALTER FUNCTION alt_func2(int) RETURNS NULL ON NULL INPUT" ,
8176+ "ALTER FUNCTION alt_func2(INT) RETURNS NULL ON NULL INPUT" ,
8177+ ) ,
8178+ (
8179+ "ALTER FUNCTION alt_func2(int) STRICT" ,
8180+ "ALTER FUNCTION alt_func2(INT) STRICT" ,
8181+ ) ,
8182+ (
8183+ "ALTER FUNCTION alt_func2(int) LEAKPROOF" ,
8184+ "ALTER FUNCTION alt_func2(INT) LEAKPROOF" ,
8185+ ) ,
8186+ (
8187+ "ALTER FUNCTION alt_func2(int) NOT LEAKPROOF" ,
8188+ "ALTER FUNCTION alt_func2(INT) NOT LEAKPROOF" ,
8189+ ) ,
8190+ (
8191+ "ALTER FUNCTION alt_func2(int) SECURITY DEFINER" ,
8192+ "ALTER FUNCTION alt_func2(INT) SECURITY DEFINER" ,
8193+ ) ,
8194+ (
8195+ "ALTER FUNCTION alt_func2(int) EXTERNAL SECURITY INVOKER" ,
8196+ "ALTER FUNCTION alt_func2(INT) EXTERNAL SECURITY INVOKER" ,
8197+ ) ,
8198+ (
8199+ "ALTER FUNCTION alt_func2(int) PARALLEL SAFE" ,
8200+ "ALTER FUNCTION alt_func2(INT) PARALLEL SAFE" ,
8201+ ) ,
8202+ (
8203+ "ALTER FUNCTION alt_func2(int) PARALLEL RESTRICTED" ,
8204+ "ALTER FUNCTION alt_func2(INT) PARALLEL RESTRICTED" ,
8205+ ) ,
8206+ (
8207+ "ALTER FUNCTION alt_func2(int) PARALLEL UNSAFE" ,
8208+ "ALTER FUNCTION alt_func2(INT) PARALLEL UNSAFE" ,
8209+ ) ,
8210+ (
8211+ "ALTER FUNCTION alt_func2(int) COST 3.5" ,
8212+ "ALTER FUNCTION alt_func2(INT) COST 3.5" ,
8213+ ) ,
8214+ (
8215+ "ALTER FUNCTION alt_func2(int) ROWS 42" ,
8216+ "ALTER FUNCTION alt_func2(INT) ROWS 42" ,
8217+ ) ,
8218+ (
8219+ "ALTER FUNCTION alt_func2(int) SUPPORT pg_catalog.alt_support" ,
8220+ "ALTER FUNCTION alt_func2(INT) SUPPORT pg_catalog.alt_support" ,
8221+ ) ,
8222+ (
8223+ "ALTER FUNCTION alt_func2(int) SET work_mem TO DEFAULT" ,
8224+ "ALTER FUNCTION alt_func2(INT) SET work_mem = DEFAULT" ,
8225+ ) ,
8226+ (
8227+ "ALTER FUNCTION alt_func2(int) SET work_mem FROM CURRENT" ,
8228+ "ALTER FUNCTION alt_func2(INT) SET work_mem FROM CURRENT" ,
8229+ ) ,
8230+ (
8231+ "ALTER FUNCTION alt_func2(int) SET search_path = pg_catalog, public" ,
8232+ "ALTER FUNCTION alt_func2(INT) SET search_path = pg_catalog, public" ,
8233+ ) ,
8234+ (
8235+ "ALTER FUNCTION alt_func2(int) RESET work_mem" ,
8236+ "ALTER FUNCTION alt_func2(INT) RESET work_mem" ,
8237+ ) ,
8238+ (
8239+ "ALTER FUNCTION alt_func2(int) RESET ALL" ,
8240+ "ALTER FUNCTION alt_func2(INT) RESET ALL" ,
8241+ ) ,
8242+ (
8243+ "ALTER FUNCTION alt_func2(int) IMMUTABLE STRICT PARALLEL SAFE RESTRICT" ,
8244+ "ALTER FUNCTION alt_func2(INT) IMMUTABLE STRICT PARALLEL SAFE RESTRICT" ,
8245+ ) ,
8246+ (
8247+ "ALTER FUNCTION alt_variadic(VARIADIC int[]) STABLE" ,
8248+ "ALTER FUNCTION alt_variadic(VARIADIC INT[]) STABLE" ,
8249+ ) ,
8250+ ] {
8251+ let statement = pg_and_generic ( ) . one_statement_parses_to ( sql, expected) ;
8252+ assert ! ( matches!(
8253+ statement,
8254+ Statement :: AlterFunction ( AlterFunction {
8255+ kind: AlterFunctionKind :: Function ,
8256+ ..
8257+ } )
8258+ ) ) ;
8259+ }
8260+
8261+ assert ! ( pg( )
8262+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT) DEPENDS ON EXTENSION ext1" )
8263+ . is_err( ) ) ;
8264+ assert ! ( pg( )
8265+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT) NO DEPENDS ON EXTENSION ext1" )
8266+ . is_err( ) ) ;
8267+ assert ! ( pg( )
8268+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(OUT INT) OWNER TO joe" )
8269+ . is_err( ) ) ;
8270+ assert ! ( pg( )
8271+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INOUT INT) OWNER TO joe" )
8272+ . is_err( ) ) ;
8273+ assert ! ( pg( )
8274+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT = 1) OWNER TO joe" )
8275+ . is_err( ) ) ;
8276+
8277+ assert ! ( pg( )
8278+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT) IMMUTABLE" )
8279+ . is_err( ) ) ;
8280+ }
8281+
80638282#[ test]
80648283fn parse_drop_operator_family ( ) {
80658284 for if_exists in [ true , false ] {
0 commit comments