完全不用任何软件工程工具,纯手工打造的一本底层架构
终于静下心来用1个多小时时间写成的一本架构文档
一:
MyBasic 架构说明
MyBasic是一个basic解释器,运行环境,能够实现内嵌过程的扩充功能,在本项目中实现内嵌基本指令,和 à
Mysql(就地说明:一个纯粹完全使用c++库开发的很简易的数据库系统,能够实现最基本的insert,select,update,drop table,drop database,create table,create database,delete,use db功能,不支持索引,不支持其他操作[不过可以有待将来扩充])功能.
将来还可以扩充http功能,等其他任何功能.
特性:
1 完全使用C,C++的基本函数库,核心内容不使用操作系统的任何函数库,只在一些不是核心的地方不值得重新开发的地方使用依赖平台的动态库加载技术.
就地说明:
很简单:使用#ifdef 语句 决定编译平台.
1 在dos下编译的话,不使用动态库加载功能,编译出来的MyBasic不能
在二进制状态使用扩充的功能,因为在dos下面时间LoadLibrary这样的功能不值得,本项目不研究这些内容.
2 windows 平台使用 dll文件
3 unix平台使用 so 文件
4 其他平台理论上可以,具体在本项目中不实现.
2 可以经过编译运行在linux,unix,windows,等等所有具备C++编译器的任何平台.
3 纯命令行界面,运行结果可以重定向到文本文件(将来可以开发图形界面接口)
4 输入输出可以接受 文件输入,命令行输入,http post输入(MyBasic可以作为一个CGI程序运行并在页面上输出运行结果).
一.1
MySql 架构说明.
分为3层
第一层: 命令行界面:
接受sql语句输入,输出运行结果 (输入输出可以重定向)
调用下一层提供的api
第二层 应用层API 实现
. Query(string sql);
. Exec(string sql);
. char [][] GetResultSet();
. ConnectDb(string databasename);
这些函数通过调用MyBasic的解析器Api接口
ParseStatement(string statement);执行sql语句,
然后ParseStatement调用MyBasic的内建过程
. ”select arg1 … argn”,
. ”delete arg1 … argn”,
. ”drop arg1=tablename”
…
(这些都是mysql中需要对最终用户提供的SQL语句).
这些内建过程都是由Mysql.dll (MySql的内核上层) 或者Mysql.so实现的.并利用MyBasic的动态可扩充功能提供给用户.这些MyBasic内建过程实现Mysql的内核功能执行完后,返回结果指针一层一层的传递给上油调用者.
第三层: MySql的内核上层
实现
. ”select arg1 … argn”,
. ”delete arg1 … argn”,
. ”drop arg1=tablename”
用这些函数来实现:
char [][] select(arg1,arg2,…,argn);
int delete(arg1,arg2,…,argn);
int drop(tablename);
int drop(databasename);
其实这些函数是由MyBasic的ParseStatement()来调用的.
第四层: MySql内核下层
实现
CreateDatabaseFile(string databasename);
CreateTableFile(string tablename);
InsertRecordToTableFile(string tablefilename,CRecord arecord);
DeleteRecordsFromTableFile(string tablefilename,CRecords[] records);
SelectRecordsFromTableFile(string tablefilename,CCondition[] conditions);
附
1:MySql的配置文件,在可执行文件的相同目录下:
MySql.ini
DataRoot=Path
MyBasicApiPath=Path
2:MySql的数据文件结构
一个文件夹就是一个数据库
一个表需要一个表结构定义文件,一个数据文件
3:MySql特性
1 支持 int,string 两种类型的数据结构
4:其他详细说明:
二:MyBasic架构说明
1层:界面层
可执行的mybasic.exe文件作为界面
2层:应用API层
提供Api库给MySql等使用(由其他程序静态编译进系统)
比如:ParseStatement(string statement);
3层:MyBasic核心
执行MyBasic的所有可扩充内建过程,并输出.
指定一个目录夹下的所有dll(或者so,或者lib)等提供MyBasic的内建过程动态扩充功能.
附:
1:MyBasic的配置文件
放在MyBasic.exe同一目录下
MyBasic.ini
ExpandDllPath=path