Skip to content

Commit f3171fb

Browse files
authored
Merge pull request #11 from xujiahe0529/python_udf_merge
update:support load python code from .py file
2 parents af0911b + 3e8c189 commit f3171fb

7 files changed

+224
-57
lines changed

src/objit/include/objit/common/ob_item_type.h

+3
Original file line numberDiff line numberDiff line change
@@ -2222,6 +2222,9 @@ typedef enum ObItemType
22222222
T_DROP_PYTHON_UDF,
22232223
T_FUNCTION_ELEMENT_LIST,
22242224
T_PARAM_DEFINITION,
2225+
T_PYTHON_CODE_TYPE,
2226+
T_PYTHON_CODE,
2227+
T_FILE_PATH,
22252228
} ObItemType;
22262229

22272230
typedef enum ObCacheType

src/share/schema/ob_python_udf.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ namespace schema
2626
{
2727

2828
ObPythonUDF::ObPythonUDF(common::ObIAllocator *allocator)
29-
: ObSchema(allocator), tenant_id_(common::OB_INVALID_ID), udf_id_(common::OB_INVALID_ID), name_(), arg_num_(0), arg_names_(), arg_types_(),
29+
: ObSchema(allocator), tenant_id_(common::OB_INVALID_ID), udf_id_(common::OB_INVALID_ID), name_(), model_name_(), arg_num_(0), arg_names_(), arg_types_(),
3030
ret_(PyUdfRetType::UDF_UNINITIAL), pycall_(), schema_version_(common::OB_INVALID_VERSION)
3131
{
3232
reset();
3333
}
3434

3535
ObPythonUDF::ObPythonUDF(const ObPythonUDF &src_schema)
36-
: ObSchema(), tenant_id_(common::OB_INVALID_ID), udf_id_(common::OB_INVALID_ID), name_(), arg_num_(0), arg_names_(), arg_types_(),
36+
: ObSchema(), tenant_id_(common::OB_INVALID_ID), udf_id_(common::OB_INVALID_ID), name_(), model_name_(), arg_num_(0), arg_names_(), arg_types_(),
3737
ret_(PyUdfRetType::UDF_UNINITIAL), pycall_(), schema_version_(common::OB_INVALID_VERSION)
3838
{
3939
reset();

src/share/schema/ob_python_udf.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ObPythonUDF : public ObSchema
4141
};
4242

4343
public:
44-
ObPythonUDF() : ObSchema(), tenant_id_(common::OB_INVALID_ID), udf_id_(common::OB_INVALID_ID), name_(), arg_num_(0), arg_names_(),
44+
ObPythonUDF() : ObSchema(), tenant_id_(common::OB_INVALID_ID), udf_id_(common::OB_INVALID_ID), name_(), model_name_(), arg_num_(0), arg_names_(),
4545
arg_types_(), ret_(PyUdfRetType::UDF_UNINITIAL), pycall_(), schema_version_(common::OB_INVALID_VERSION)
4646
{ reset(); };
4747
explicit ObPythonUDF(common::ObIAllocator *allocator);
@@ -57,6 +57,7 @@ class ObPythonUDF : public ObSchema
5757
inline void set_tenant_id(const uint64_t id) { tenant_id_ = id; }
5858
inline void set_udf_id(const uint64_t id) { udf_id_ = id; }
5959
inline int set_name(const common::ObString &name) { return deep_copy_str(name, name_); }
60+
inline int set_model_name(const common::ObString &model_name) { return deep_copy_str(model_name, model_name_); }
6061
inline void set_ret(const enum PyUdfRetType ret) { ret_ = ret; }
6162
inline void set_ret(const int ret) { ret_ = PyUdfRetType(ret); }
6263
inline void set_arg_num(const int arg_num) { arg_num_ = arg_num; }
@@ -70,6 +71,8 @@ class ObPythonUDF : public ObSchema
7071
inline uint64_t get_udf_id() const { return udf_id_; }
7172
inline const char *get_name() const { return extract_str(name_); }
7273
inline const common::ObString &get_name_str() const { return name_; }
74+
inline const char *get_model_name() const { return extract_str(model_name_); }
75+
inline const common::ObString &get_model_name_str() const { return model_name_; }
7376
inline int get_arg_num() const { return arg_num_; }
7477
const char *get_arg_names() const { return extract_str(arg_names_); }
7578
inline const common::ObString &get_arg_names_str() const { return arg_names_; }
@@ -93,6 +96,7 @@ class ObPythonUDF : public ObSchema
9396
TO_STRING_KV(K_(tenant_id),
9497
K_(udf_id),
9598
K_(name),
99+
K_(model_name),
96100
K_(arg_num),
97101
K_(arg_names),
98102
K_(arg_types),
@@ -104,6 +108,7 @@ class ObPythonUDF : public ObSchema
104108
uint64_t tenant_id_;
105109
uint64_t udf_id_;
106110
common::ObString name_;
111+
common::ObString model_name_;
107112
int arg_num_; //参数数量
108113
common::ObString arg_names_; //参数名称
109114
common::ObString arg_types_; //参数类型

src/sql/parser/non_reserved_keywords_mysql_mode.c

+4
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ static const NonReservedKeyword Mysql_none_reserved_keywords[] =
275275
{"fields", FIELDS},
276276
{"file", FILEX},
277277
{"file_id", FILE_ID},
278+
{"file_path", FILE_PATH},
278279
{"final_count", FINAL_COUNT},
279280
{"first", FIRST},
280281
{"first_value", FIRST_VALUE},
@@ -584,6 +585,7 @@ static const NonReservedKeyword Mysql_none_reserved_keywords[] =
584585
{"partitioning", PARTITIONING},
585586
{"partitions", PARTITIONS},
586587
{"password", PASSWORD},
588+
{"path", PATH},
587589
{"pause", PAUSE},
588590
{"percentage", PERCENTAGE},
589591
{"percent_rank", PERCENT_RANK},
@@ -625,6 +627,7 @@ static const NonReservedKeyword Mysql_none_reserved_keywords[] =
625627
{"preceding", PRECEDING},
626628
{"pctfree", PCTFREE},
627629
{"ps", PS},
630+
{"python_code", PYTHON_CODE},
628631
{"python_udf", PYTHON_UDF},
629632
{"quarter", QUARTER},
630633
{"query", QUERY},
@@ -865,6 +868,7 @@ static const NonReservedKeyword Mysql_none_reserved_keywords[] =
865868
{"trace", TRACE},
866869
{"traditional", TRADITIONAL},
867870
{"trailing", TRAILING},
871+
{"train", TRAIN},
868872
{"transaction", TRANSACTION},
869873
{"trigger", TRIGGER},
870874
{"triggers", TRIGGERS},

src/sql/parser/sql_parser_mysql_mode.y

+46-7
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ END_P SET_VAR DELIMITER
268268
ESCAPE EVENT EVENTS EVERY EXCHANGE EXECUTE EXPANSION EXPIRE EXPIRE_INFO EXPORT OUTLINE EXTENDED
269269
EXTENDED_NOADDR EXTENT_SIZE EXTRACT EXCEPT EXPIRED
270270

271-
FAILOVER FAST FAULTS FIELDS FILEX FINAL_COUNT FIRST FIRST_VALUE FIXED FLUSH FOLLOWER FORMAT
271+
FAILOVER FAST FAULTS FIELDS FILEX FILE_PATH FINAL_COUNT FIRST FIRST_VALUE FIXED FLUSH FOLLOWER FORMAT
272272
FOUND FREEZE FREQUENCY FUNCTION FOLLOWING FLASHBACK FULL FRAGMENTATION FROZEN FILE_ID
273273

274274
GENERAL GEOMETRY GEOMCOLLECTION GEOMETRYCOLLECTION GET_FORMAT GLOBAL GRANTS GROUP_CONCAT GROUPING GTS
@@ -304,11 +304,11 @@ END_P SET_VAR DELIMITER
304304
OBSOLETE OCCUR OF OFF OFFSET OLD OLD_PASSWORD ONE ONE_SHOT ONLY OPEN OPTIONS ORIG_DEFAULT OWNER OLD_KEY OVER
305305
OBCONFIG_URL OJ
306306

307-
PACK_KEYS PAGE PARALLEL PARAMETERS PARSER PARTIAL PARTITION_ID PARTITIONING PARTITIONS PASSWORD PAUSE PERCENTAGE
307+
PACK_KEYS PAGE PARALLEL PARAMETERS PARSER PARTIAL PARTITION_ID PARTITIONING PARTITIONS PASSWORD PATH PAUSE PERCENTAGE
308308
PERCENT_RANK PHASE PLAN PHYSICAL PLANREGRESS PLUGIN PLUGIN_DIR PLUGINS POINT POLYGON PERFORMANCE
309309
PROTECTION PRIORITY PL POLICY POOL PORT POSITION PREPARE PRESERVE PRETTY PRETTY_COLOR PREV PRIMARY_ZONE PRIVILEGES PROCESS
310310
PROCESSLIST PROFILE PROFILES PROXY PRECEDING PCTFREE P_ENTITY P_CHUNK
311-
PUBLIC PROGRESSIVE_MERGE_NUM PREVIEW PS PLUS PREDICT PYTHON_UDF
311+
PUBLIC PROGRESSIVE_MERGE_NUM PREVIEW PS PLUS PREDICT PYTHON_CODE PYTHON_UDF
312312

313313
QUARTER QUERY QUERY_RESPONSE_TIME QUEUE_TIME QUICK
314314

@@ -334,7 +334,7 @@ END_P SET_VAR DELIMITER
334334

335335
TABLE_CHECKSUM TABLE_MODE TABLE_ID TABLE_NAME TABLEGROUPS TABLES TABLESPACE TABLET TABLET_ID TABLET_MAX_SIZE
336336
TEMPLATE TEMPORARY TEMPTABLE TENANT TEXT THAN TIME TIMESTAMP TIMESTAMPADD TIMESTAMPDIFF TP_NO
337-
TP_NAME TRACE TRADITIONAL TRANSACTION TRIGGERS TRIM TRUNCATE TYPE TYPES TASK TABLET_SIZE
337+
TP_NAME TRACE TRADITIONAL TRAIN TRANSACTION TRIGGERS TRIM TRUNCATE TYPE TYPES TASK TABLET_SIZE
338338
TABLEGROUP_ID TENANT_ID THROTTLE TIME_ZONE_INFO TOP_K_FRE_HIST TIMES
339339

340340
UNCOMMITTED UNDEFINED UNDO_BUFFER_SIZE UNDOFILE UNICODE UNINSTALL UNIT UNIT_GROUP UNIT_NUM UNLOCKED UNTIL
@@ -498,7 +498,7 @@ END_P SET_VAR DELIMITER
498498
%type <node> recover_tenant_stmt recover_point_clause
499499
/*新增*/
500500
%type <node> create_python_udf_stmt drop_python_udf_stmt
501-
%type <node> function_element_list function_element param_name param_type
501+
%type <node> function_element_list function_element param_name param_type python_code_type
502502
%start sql_stmt
503503
%%
504504
////////////////////////////////////////////////////////////////
@@ -2718,6 +2718,21 @@ MOD '(' expr ',' expr ')'
27182718
store_pl_ref_object_symbol($$, result, REF_FUNC);
27192719
}
27202720
}
2721+
| TRAIN function_name '(' opt_expr_as_list ')'
2722+
{
2723+
if (NULL != $4)
2724+
{
2725+
ParseNode *params = NULL;
2726+
merge_nodes(params, result, T_EXPR_LIST, $4);
2727+
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS_PYTHON_UDF, 2, $2, params);
2728+
store_pl_ref_object_symbol($$, result, REF_FUNC);
2729+
}
2730+
else
2731+
{
2732+
malloc_non_terminal_node($$, result->malloc_pool_, T_FUN_SYS_PYTHON_UDF, 1, $2);
2733+
store_pl_ref_object_symbol($$, result, REF_FUNC);
2734+
}
2735+
}
27212736
| sys_interval_func
27222737
{
27232738
$$ = $1;
@@ -4413,15 +4428,27 @@ NUMERIC
44134428
;
44144429

44154430
create_python_udf_stmt:
4416-
CREATE PYTHON_UDF NAME_OB '(' function_element_list ')' RETURNS ret_type '{' STRING_VALUE '}'
4431+
CREATE PYTHON_UDF NAME_OB '(' function_element_list ')' RETURNS ret_type python_code_type
44174432
{
44184433
ParseNode *function_elements = NULL;
4434+
ParseNode *code_type_node = NULL;
44194435
merge_nodes(function_elements, result, T_FUNCTION_ELEMENT_LIST, $5);
4436+
merge_nodes(code_type_node, result, T_PYTHON_CODE_TYPE, $9);
44204437
malloc_non_terminal_node($$, result->malloc_pool_, T_CREATE_PYTHON_UDF, 4,
44214438
$3, /* udf name */
44224439
function_elements, /* function parameter */
44234440
$8, /* return type */
4424-
$10); /* python code */
4441+
code_type_node); /* python code type */
4442+
}
4443+
|
4444+
CREATE PYTHON_UDF NAME_OB MODEL NAME_OB python_code_type
4445+
{
4446+
ParseNode *code_type_node = NULL;
4447+
merge_nodes(code_type_node, result, T_PYTHON_CODE_TYPE, $6);
4448+
malloc_non_terminal_node($$, result->malloc_pool_, T_CREATE_PYTHON_UDF, 3,
4449+
$3, /* udf name */
4450+
$5, /* model name */
4451+
code_type_node); /* python code type */
44254452
}
44264453
;
44274454

@@ -4491,6 +4518,18 @@ NUMERIC
44914518
}
44924519
;
44934520

4521+
python_code_type:
4522+
PYTHON_CODE '{' STRING_VALUE '}'
4523+
{
4524+
malloc_non_terminal_node($$, result->malloc_pool_, T_PYTHON_CODE, 1, $3);
4525+
}
4526+
|
4527+
FILE_PATH STRING_VALUE
4528+
{
4529+
malloc_non_terminal_node($$, result->malloc_pool_, T_FILE_PATH, 1, $2);
4530+
}
4531+
;
4532+
44944533
create_function_stmt:
44954534
create_with_opt_hint opt_agg FUNCTION NAME_OB RETURNS ret_type SONAME STRING_VALUE
44964535
{

0 commit comments

Comments
 (0)