@@ -37,6 +37,7 @@ use crate::BindContext;
3737use crate :: ScalarBinder ;
3838use crate :: binder:: Binder ;
3939use crate :: binder:: table_args:: bind_table_args;
40+ use crate :: binder:: table_args:: malformed_named_table_arg_error;
4041use crate :: binder:: util:: TableIdentifier ;
4142use crate :: optimizer:: ir:: SExpr ;
4243
@@ -47,20 +48,32 @@ impl Binder {
4748 params : & [ Expr ] ,
4849 named_params : & [ ( Identifier , Expr ) ] ,
4950 ) -> Result < ( SExpr , BindContext ) > {
50- let param = match params {
51- [ ] => Err ( None ) ,
52- [ param @ Expr :: ColumnRef { .. } ] => Ok ( param. clone ( ) ) ,
53- _ => Err ( params [ 0 ] . span ( ) ) ,
51+ let ( param, extra_params ) = match params {
52+ [ ] => ( Err ( None ) , & [ ] [ .. ] ) ,
53+ [ param @ Expr :: ColumnRef { .. } ] => ( Ok ( param. clone ( ) ) , & [ ] [ .. ] ) ,
54+ [ param , extra_params @ .. ] => ( Err ( param . span ( ) ) , extra_params ) ,
5455 } ;
5556
57+ if let Some ( extra_param) = extra_params. first ( ) {
58+ if let Some ( err) = malformed_named_table_arg_error ( "obfuscate" , extra_param) {
59+ return Err ( err) ;
60+ }
61+
62+ return Err ( ErrorCode :: InvalidArgument (
63+ "The `OBFUSCATE` function accepts one table_name positional argument and an optional `seed => ...` named argument." ,
64+ )
65+ . set_span ( extra_param. span ( ) ) ) ;
66+ }
67+
5668 let mut scalar_binder = ScalarBinder :: new (
5769 bind_context,
5870 self . ctx . clone ( ) ,
5971 & self . name_resolution_ctx ,
6072 self . metadata . clone ( ) ,
6173 & [ ] ,
6274 ) ;
63- let mut named_args = bind_table_args ( & mut scalar_binder, & [ ] , named_params, & None ) ?. named ;
75+ let mut named_args =
76+ bind_table_args ( "obfuscate" , & mut scalar_binder, & [ ] , named_params, & None ) ?. named ;
6477 let seed = match named_args. remove ( "seed" ) {
6578 Some ( v) => u64_value ( & v) . ok_or ( ErrorCode :: BadArguments ( "invalid seed" ) ) ?,
6679 None => {
0 commit comments