新的一年

回看去年,22年过的也不是很顺利,中间发生了很多不愉快的事情。想写些东西,感觉又是无从下笔。真的不知道写些什么。希望23年能够好点吧。

MySQL Oracle兼容性开发

Oracle兼容性分析

下面是从技术角度给出关于oracle兼容语法支持的相关工作量估计。

主要从两个角度来分析1:功能角度,在这部分给出oracle语法兼容所涉及到的功能点,在该部分不给出具体的工作量估计;

2:实现角度,在该部分给出了相关oracle语句兼容所涉及到的相关修改的已经所相应的工作量估计;最后,给出MTR部分相关的工作量估计。

1      Oracle 语法

  •  涉及到oracle相关的文件。

./sql/item_func.cc:

./sql/sql_lex.h:

./sql/structs.h

./sql/sql_lex.cc

./sql/sql_yacc.yy:

sql_yacc_ora.yy

./sql/item_create.cc:

./sql/item_cmpfunc.h:

./sql/item_func.h:

./sql/item_strfunc.cc:

./sql/item_cmpfunc.cc

./client/mysqldump.c:

./storage/spider/CMakeLists.txt:

./storage/spider/spd_table.cc:

./storage/spider/spd_db_oracle.cc:

./storage/spider/spd_db_oracle.h:

sql/sql_parse.cc

sql/sql_class.h

sql/sp_head.cc:

sql/sp.cc

sql/sp_pcontext.cc

sql/sql_show.cc

sql/log_event.h:

sql/sys_vars.cc

sql/event_data_objects.cc

sql/event_data_objects.cc

sql/sql_view.cc:

sql/sql_view.cc

sql/sql_class.cc

server/sql/sql_cursor.h

server/sql/sql_cursor.cc

sql/sql_class.h:

sql/sql_prepare.cc

  •   oracle特性涉及如下方面:

Stored Procedures and Stored Functions

Cursors

Variables

Exceptions

BEGIN Blocks

Functions

Prepared Statements

Synonyms for Basic SQL Types

Packages

2      对于CTE

sql/sql_cte.cc:

3      窗口函数:

https://mariadb.com/kb/en/library/window-functions/

sql_window.cc

sql_window.h

4      新支持的存储引擎(10.3版本中):

5      从功能点角度来看:共涉及到如下12项功能点,其中每个功能点中所涉及的子功能点的说明。

1: ORACLE所涉及的功能点:(refs:https://mariadb.com/kb/en/library/sql_modeoracle-from-mariadb-103/)

1.1. Stored procedures 和Stored Function.  该部分涉及到10项功能点;

1.2. Cursor 游标,(共涉及到5项功能点修改)

1.3 Loop 循环(共涉及到6项功能点修改)

1.3 variables 变量(共涉及到12功能点)

1.4 Exception异常(共涉及到4功能点修改)

1.5 Begin 块(共涉及到3功能点修改)

1.6 simple syntax 兼容(共涉及到3项功能点修改)

1.6 functions函数(共涉及到5修改点)

1.7 prepared statement(涉及2项功能点修改)

1.8 basic sql type相关同义词(涉及6项功能点修改)

1.9 package(涉及,create package, drop pakcage, show 功能点修改)

1.10 NULL处理(涉及1个功能点修改,NULL as a statement)

1.11 空字符窜作为NULL处理(涉及1个功能点修改)

1.12 Concat 操作符忽略NULL(涉及1个功能点修改)

6      从技术实现角度来看,分为(1)MySQL层;(2)InnoDB层;两部分

1) MySQL层:

0:SQL Mode参数对于Oracle的支持.

0.1   SQL Mode type定义  (sql_class.cc )及sql_mode中的 MODE_ORACLE的支持

1: Oracle基本语法规则支持:

1.1:语法规则支持(sql_yacc.yy, sql_yacc_ora.yy  sql_lex.cc , lex.xx 修改)

1.2:mysql_parse.cc修改

1.3 :  date兼容性修改  (sql_class.xx)

1.4:存储过程支持   (sp_context, sp.xx, item_create.xx, item_cmpfunc.xx ,item_strfunc,item_cmpfunc, )

1.5:存储函数支持

1.6:pakcage特性

1.7: 其它相关(例如:event等, event_data_objects.xx)

2:工具类型: show xxx 部分

2.1  show command 修改(sql_show.xx )

2.2  view (sql_view.xx)

2.3 oracle mode 下的其它参数兼容性检查(sql_vars.xx)

2.4 error (sql_error.xx)

2.5 系统脚本修改(mysql_system_tables_fix.sql, mysql_system_tables.sql)

InnoDB层:

(暂无)

7       测试用例MTR

需要进行大量且全面测试