@@ -7932,6 +7932,225 @@ fn parse_alter_operator_class() {
79327932 . is_err( ) ) ;
79337933}
79347934
7935+ #[ test]
7936+ fn parse_alter_function_and_aggregate ( ) {
7937+ for ( sql, expected) in [
7938+ (
7939+ "ALTER AGGREGATE alt_func1(int) RENAME TO alt_func3" ,
7940+ "ALTER AGGREGATE alt_func1(INT) RENAME TO alt_func3" ,
7941+ ) ,
7942+ (
7943+ "ALTER AGGREGATE alt_func1(int) OWNER TO regress_alter_generic_user3" ,
7944+ "ALTER AGGREGATE alt_func1(INT) OWNER TO regress_alter_generic_user3" ,
7945+ ) ,
7946+ (
7947+ "ALTER AGGREGATE alt_func1(int) SET SCHEMA alt_nsp2" ,
7948+ "ALTER AGGREGATE alt_func1(INT) SET SCHEMA alt_nsp2" ,
7949+ ) ,
7950+ (
7951+ "ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg2" ,
7952+ "ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg2" ,
7953+ ) ,
7954+ (
7955+ "ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg3" ,
7956+ "ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg3" ,
7957+ ) ,
7958+ (
7959+ "ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user2" ,
7960+ "ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user2" ,
7961+ ) ,
7962+ (
7963+ "ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user3" ,
7964+ "ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user3" ,
7965+ ) ,
7966+ (
7967+ "ALTER AGGREGATE alt_agg2(int) SET SCHEMA alt_nsp2" ,
7968+ "ALTER AGGREGATE alt_agg2(INT) SET SCHEMA alt_nsp2" ,
7969+ ) ,
7970+ (
7971+ "ALTER AGGREGATE alt_order(int ORDER BY text) RENAME TO alt_order2" ,
7972+ "ALTER AGGREGATE alt_order(INT ORDER BY TEXT) RENAME TO alt_order2" ,
7973+ ) ,
7974+ (
7975+ "ALTER AGGREGATE alt_order_only(ORDER BY int) SET SCHEMA alt_nsp2" ,
7976+ "ALTER AGGREGATE alt_order_only(ORDER BY INT) SET SCHEMA alt_nsp2" ,
7977+ ) ,
7978+ (
7979+ "ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2" ,
7980+ "ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2" ,
7981+ ) ,
7982+ ] {
7983+ let statement = pg_and_generic ( ) . one_statement_parses_to ( sql, expected) ;
7984+ assert ! ( matches!(
7985+ statement,
7986+ Statement :: AlterFunction ( AlterFunction {
7987+ kind: AlterFunctionKind :: Aggregate ,
7988+ ..
7989+ } )
7990+ ) ) ;
7991+ }
7992+
7993+ for ( sql, expected) in [
7994+ (
7995+ "ALTER FUNCTION alt_func1(int) RENAME TO alt_func2" ,
7996+ "ALTER FUNCTION alt_func1(INT) RENAME TO alt_func2" ,
7997+ ) ,
7998+ (
7999+ "ALTER FUNCTION alt_func1(int) RENAME TO alt_func3" ,
8000+ "ALTER FUNCTION alt_func1(INT) RENAME TO alt_func3" ,
8001+ ) ,
8002+ (
8003+ "ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user2" ,
8004+ "ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user2" ,
8005+ ) ,
8006+ (
8007+ "ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user3" ,
8008+ "ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user3" ,
8009+ ) ,
8010+ (
8011+ "ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp1" ,
8012+ "ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp1" ,
8013+ ) ,
8014+ (
8015+ "ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp2" ,
8016+ "ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp2" ,
8017+ ) ,
8018+ (
8019+ "ALTER FUNCTION alt_func2(int) DEPENDS ON EXTENSION ext1" ,
8020+ "ALTER FUNCTION alt_func2(INT) DEPENDS ON EXTENSION ext1" ,
8021+ ) ,
8022+ (
8023+ "ALTER FUNCTION alt_func2(int) NO DEPENDS ON EXTENSION ext1" ,
8024+ "ALTER FUNCTION alt_func2(INT) NO DEPENDS ON EXTENSION ext1" ,
8025+ ) ,
8026+ (
8027+ "ALTER FUNCTION alt_func2 IMMUTABLE" ,
8028+ "ALTER FUNCTION alt_func2 IMMUTABLE" ,
8029+ ) ,
8030+ (
8031+ "ALTER FUNCTION alt_func2(int) IMMUTABLE" ,
8032+ "ALTER FUNCTION alt_func2(INT) IMMUTABLE" ,
8033+ ) ,
8034+ (
8035+ "ALTER FUNCTION alt_func2(int) STABLE" ,
8036+ "ALTER FUNCTION alt_func2(INT) STABLE" ,
8037+ ) ,
8038+ (
8039+ "ALTER FUNCTION alt_func2(int) VOLATILE" ,
8040+ "ALTER FUNCTION alt_func2(INT) VOLATILE" ,
8041+ ) ,
8042+ (
8043+ "ALTER FUNCTION alt_func2(int) CALLED ON NULL INPUT" ,
8044+ "ALTER FUNCTION alt_func2(INT) CALLED ON NULL INPUT" ,
8045+ ) ,
8046+ (
8047+ "ALTER FUNCTION alt_func2(int) RETURNS NULL ON NULL INPUT" ,
8048+ "ALTER FUNCTION alt_func2(INT) RETURNS NULL ON NULL INPUT" ,
8049+ ) ,
8050+ (
8051+ "ALTER FUNCTION alt_func2(int) STRICT" ,
8052+ "ALTER FUNCTION alt_func2(INT) STRICT" ,
8053+ ) ,
8054+ (
8055+ "ALTER FUNCTION alt_func2(int) LEAKPROOF" ,
8056+ "ALTER FUNCTION alt_func2(INT) LEAKPROOF" ,
8057+ ) ,
8058+ (
8059+ "ALTER FUNCTION alt_func2(int) NOT LEAKPROOF" ,
8060+ "ALTER FUNCTION alt_func2(INT) NOT LEAKPROOF" ,
8061+ ) ,
8062+ (
8063+ "ALTER FUNCTION alt_func2(int) SECURITY DEFINER" ,
8064+ "ALTER FUNCTION alt_func2(INT) SECURITY DEFINER" ,
8065+ ) ,
8066+ (
8067+ "ALTER FUNCTION alt_func2(int) EXTERNAL SECURITY INVOKER" ,
8068+ "ALTER FUNCTION alt_func2(INT) EXTERNAL SECURITY INVOKER" ,
8069+ ) ,
8070+ (
8071+ "ALTER FUNCTION alt_func2(int) PARALLEL SAFE" ,
8072+ "ALTER FUNCTION alt_func2(INT) PARALLEL SAFE" ,
8073+ ) ,
8074+ (
8075+ "ALTER FUNCTION alt_func2(int) PARALLEL RESTRICTED" ,
8076+ "ALTER FUNCTION alt_func2(INT) PARALLEL RESTRICTED" ,
8077+ ) ,
8078+ (
8079+ "ALTER FUNCTION alt_func2(int) PARALLEL UNSAFE" ,
8080+ "ALTER FUNCTION alt_func2(INT) PARALLEL UNSAFE" ,
8081+ ) ,
8082+ (
8083+ "ALTER FUNCTION alt_func2(int) COST 3.5" ,
8084+ "ALTER FUNCTION alt_func2(INT) COST 3.5" ,
8085+ ) ,
8086+ (
8087+ "ALTER FUNCTION alt_func2(int) ROWS 42" ,
8088+ "ALTER FUNCTION alt_func2(INT) ROWS 42" ,
8089+ ) ,
8090+ (
8091+ "ALTER FUNCTION alt_func2(int) SUPPORT pg_catalog.alt_support" ,
8092+ "ALTER FUNCTION alt_func2(INT) SUPPORT pg_catalog.alt_support" ,
8093+ ) ,
8094+ (
8095+ "ALTER FUNCTION alt_func2(int) SET work_mem TO DEFAULT" ,
8096+ "ALTER FUNCTION alt_func2(INT) SET work_mem = DEFAULT" ,
8097+ ) ,
8098+ (
8099+ "ALTER FUNCTION alt_func2(int) SET work_mem FROM CURRENT" ,
8100+ "ALTER FUNCTION alt_func2(INT) SET work_mem FROM CURRENT" ,
8101+ ) ,
8102+ (
8103+ "ALTER FUNCTION alt_func2(int) SET search_path = pg_catalog, public" ,
8104+ "ALTER FUNCTION alt_func2(INT) SET search_path = pg_catalog, public" ,
8105+ ) ,
8106+ (
8107+ "ALTER FUNCTION alt_func2(int) RESET work_mem" ,
8108+ "ALTER FUNCTION alt_func2(INT) RESET work_mem" ,
8109+ ) ,
8110+ (
8111+ "ALTER FUNCTION alt_func2(int) RESET ALL" ,
8112+ "ALTER FUNCTION alt_func2(INT) RESET ALL" ,
8113+ ) ,
8114+ (
8115+ "ALTER FUNCTION alt_func2(int) IMMUTABLE STRICT PARALLEL SAFE RESTRICT" ,
8116+ "ALTER FUNCTION alt_func2(INT) IMMUTABLE STRICT PARALLEL SAFE RESTRICT" ,
8117+ ) ,
8118+ (
8119+ "ALTER FUNCTION alt_variadic(VARIADIC int[]) STABLE" ,
8120+ "ALTER FUNCTION alt_variadic(VARIADIC INT[]) STABLE" ,
8121+ ) ,
8122+ ] {
8123+ let statement = pg_and_generic ( ) . one_statement_parses_to ( sql, expected) ;
8124+ assert ! ( matches!(
8125+ statement,
8126+ Statement :: AlterFunction ( AlterFunction {
8127+ kind: AlterFunctionKind :: Function ,
8128+ ..
8129+ } )
8130+ ) ) ;
8131+ }
8132+
8133+ assert ! ( pg( )
8134+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT) DEPENDS ON EXTENSION ext1" )
8135+ . is_err( ) ) ;
8136+ assert ! ( pg( )
8137+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT) NO DEPENDS ON EXTENSION ext1" )
8138+ . is_err( ) ) ;
8139+ assert ! ( pg( )
8140+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(OUT INT) OWNER TO joe" )
8141+ . is_err( ) ) ;
8142+ assert ! ( pg( )
8143+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INOUT INT) OWNER TO joe" )
8144+ . is_err( ) ) ;
8145+ assert ! ( pg( )
8146+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT = 1) OWNER TO joe" )
8147+ . is_err( ) ) ;
8148+
8149+ assert ! ( pg( )
8150+ . parse_sql_statements( "ALTER AGGREGATE alt_func1(INT) IMMUTABLE" )
8151+ . is_err( ) ) ;
8152+ }
8153+
79358154#[ test]
79368155fn parse_drop_operator_family ( ) {
79378156 for if_exists in [ true , false ] {
0 commit comments