@@ -4,8 +4,7 @@ use std::sync::Arc;
44
55use async_trait:: async_trait;
66use datafusion:: arrow:: array:: {
7- as_boolean_array, ArrayRef , BooleanArray , BooleanBuilder , RecordBatch , StringArray ,
8- StringBuilder ,
7+ as_boolean_array, ArrayRef , BooleanBuilder , RecordBatch , StringArray , StringBuilder ,
98} ;
109use datafusion:: arrow:: datatypes:: { DataType , Field , SchemaRef } ;
1110use datafusion:: arrow:: ipc:: reader:: FileReader ;
@@ -21,6 +20,7 @@ use postgres_types::Oid;
2120use tokio:: sync:: RwLock ;
2221
2322mod empty_table;
23+ mod has_privilege_udf;
2424mod pg_attribute;
2525mod pg_class;
2626mod pg_database;
@@ -863,62 +863,6 @@ pub fn create_pg_table_is_visible(name: &str) -> ScalarUDF {
863863 )
864864}
865865
866- pub fn create_has_privilege_3param_udf ( name : & str ) -> ScalarUDF {
867- // Define the function implementation for 3-parameter version
868- let func = move |args : & [ ColumnarValue ] | {
869- let args = ColumnarValue :: values_to_arrays ( args) ?;
870- let user = & args[ 0 ] ; // User (can be name or OID)
871- let _obj = & args[ 1 ] ; // Table (can be name or OID)
872- let _privilege = & args[ 2 ] ; // Privilege type (SELECT, INSERT, etc.)
873-
874- // For now, always return true (full access)
875- let mut builder = BooleanArray :: builder ( user. len ( ) ) ;
876- for _ in 0 ..user. len ( ) {
877- builder. append_value ( true ) ;
878- }
879-
880- let array: ArrayRef = Arc :: new ( builder. finish ( ) ) ;
881-
882- Ok ( ColumnarValue :: Array ( array) )
883- } ;
884-
885- // Wrap the implementation in a scalar function
886- create_udf (
887- name,
888- vec ! [ DataType :: Utf8 , DataType :: Utf8 , DataType :: Utf8 ] ,
889- DataType :: Boolean ,
890- Volatility :: Stable ,
891- Arc :: new ( func) ,
892- )
893- }
894-
895- pub fn create_has_privilege_2param_udf ( name : & str ) -> ScalarUDF {
896- // Define the function implementation for 2-parameter version (current user, table, privilege)
897- let func = move |args : & [ ColumnarValue ] | {
898- let args = ColumnarValue :: values_to_arrays ( args) ?;
899- let obj = & args[ 0 ] ; // Table (can be name or OID)
900- let _privilege = & args[ 1 ] ; // Privilege type (SELECT, INSERT, etc.)
901-
902- // For now, always return true (full access for current user)
903- let mut builder = BooleanArray :: builder ( obj. len ( ) ) ;
904- for _ in 0 ..obj. len ( ) {
905- builder. append_value ( true ) ;
906- }
907- let array: ArrayRef = Arc :: new ( builder. finish ( ) ) ;
908-
909- Ok ( ColumnarValue :: Array ( array) )
910- } ;
911-
912- // Wrap the implementation in a scalar function
913- create_udf (
914- name,
915- vec ! [ DataType :: Utf8 , DataType :: Utf8 ] ,
916- DataType :: Boolean ,
917- Volatility :: Stable ,
918- Arc :: new ( func) ,
919- )
920- }
921-
922866pub fn create_format_type_udf ( ) -> ScalarUDF {
923867 let func = move |args : & [ ColumnarValue ] | {
924868 let args = ColumnarValue :: values_to_arrays ( args) ?;
@@ -1015,36 +959,30 @@ pub fn setup_pg_catalog(
1015959 session_context. register_udf ( create_current_schemas_udf ( "pg_catalog.current_schemas" ) ) ;
1016960 session_context. register_udf ( create_version_udf ( ) ) ;
1017961 session_context. register_udf ( create_pg_get_userbyid_udf ( ) ) ;
1018- session_context. register_udf ( create_has_privilege_2param_udf ( "has_table_privilege" ) ) ;
1019- session_context. register_udf ( create_has_privilege_2param_udf (
1020- "pg_catalog.has_table_privilege" ,
962+ session_context. register_udf ( has_privilege_udf:: create_has_privilege_udf (
963+ "has_table_privilege" ,
1021964 ) ) ;
1022- session_context. register_udf ( create_has_privilege_2param_udf ( "has_schema_privilege" ) ) ;
1023- session_context. register_udf ( create_has_privilege_2param_udf (
1024- "pg_catalog.has_schema_privilege" ,
1025- ) ) ;
1026- session_context. register_udf ( create_has_privilege_2param_udf ( "has_any_column_privilege" ) ) ;
1027- session_context. register_udf ( create_has_privilege_2param_udf (
1028- "pg_catalog.has_any_column_privilege" ,
1029- ) ) ;
1030- session_context. register_udf ( create_has_privilege_3param_udf ( "has_table_privilege" ) ) ;
1031- session_context. register_udf ( create_has_privilege_3param_udf (
965+ session_context. register_udf ( has_privilege_udf:: create_has_privilege_udf (
1032966 "pg_catalog.has_table_privilege" ,
1033967 ) ) ;
1034- session_context. register_udf ( create_has_privilege_3param_udf ( "has_schema_privilege" ) ) ;
1035- session_context. register_udf ( create_has_privilege_3param_udf (
968+ session_context. register_udf ( has_privilege_udf:: create_has_privilege_udf (
969+ "has_schema_privilege" ,
970+ ) ) ;
971+ session_context. register_udf ( has_privilege_udf:: create_has_privilege_udf (
1036972 "pg_catalog.has_schema_privilege" ,
1037973 ) ) ;
1038- session_context. register_udf ( create_has_privilege_3param_udf ( "has_any_column_privilege" ) ) ;
1039- session_context. register_udf ( create_has_privilege_3param_udf (
974+ session_context. register_udf ( has_privilege_udf:: create_has_privilege_udf (
975+ "has_any_column_privilege" ,
976+ ) ) ;
977+ session_context. register_udf ( has_privilege_udf:: create_has_privilege_udf (
1040978 "pg_catalog.has_any_column_privilege" ,
1041979 ) ) ;
1042980 session_context. register_udf ( create_pg_table_is_visible ( "pg_catalog" ) ) ;
1043981 session_context. register_udf ( create_pg_table_is_visible ( "pg_catalog.pg_table_is_visible" ) ) ;
1044982 session_context. register_udf ( create_format_type_udf ( ) ) ;
1045983 session_context. register_udf ( create_session_user_udf ( ) ) ;
1046984 session_context. register_udtf ( "pg_get_keywords" , static_tables. pg_get_keywords . clone ( ) ) ;
1047- session_context. register_udf ( pg_get_expr_udf:: PgGetExprUDF :: new ( ) . into_scalar_udf ( ) ) ;
985+ session_context. register_udf ( pg_get_expr_udf:: create_pg_get_expr_udf ( ) ) ;
1048986 session_context. register_udf ( create_pg_get_partkeydef_udf ( ) ) ;
1049987
1050988 Ok ( ( ) )
0 commit comments