Redian新闻
>
实现一个parser可以解析给定的几种sql语句,怎么做?
avatar
实现一个parser可以解析给定的几种sql语句,怎么做?# JobHunting - 待字闺中
b*n
1
需要写现场可以运行的代码
求思路
用什么数据结构
avatar
l*s
2
具体一些,解析的结果是怎样要求的?

【在 b*********n 的大作中提到】
: 需要写现场可以运行的代码
: 求思路
: 用什么数据结构

avatar
a*5
3
应该是要实现一个简单的抽象语法树parser吧,parser本身可以用状态机来做
avatar
b*n
4
比如说有下面的数据 和 sql query, 让输出结果
String[][] data = {
{ "id", "gender", "age", "job" },
{ "1", "male", "10", "yes" },
{ "2", "female", "20", "no" },
{ "3", "male", "30", "yes" }, };
String query = "select id, gender, age from table where gender = male";

【在 l******s 的大作中提到】
: 具体一些,解析的结果是怎样要求的?
avatar
l*s
5
首先,Table一定是一个List,那么需要示意地定义几个类或接口IObject1,
IObject2准备被from 选用。
选用一个Hashmap,mapping From的Table名字字符串和List的变量。
假设有
IList list = new List();
list.Add(...);...
map[table] = list;
从易到难,单表查询且没有Group By开始,写一个解析器存入三个字符组string[]
select,string[] from,KeyValuePair[] where
三个参数的函数
public IList> Retrieve(string[] select, string[] from,
KeyValuePair[] where){
...
//在.Net中Linq可以简化为
return map[from[0]].Select(select[0], select[1], ...).Where(where.Key =
where.Value);
}
然后加上多表Join,这里用DI Container好一些,因为表的数量不定,Group By比较麻
烦,相信面试时候这两样也就说说,代码是写不完的。

【在 b*********n 的大作中提到】
: 比如说有下面的数据 和 sql query, 让输出结果
: String[][] data = {
: { "id", "gender", "age", "job" },
: { "1", "male", "10", "yes" },
: { "2", "female", "20", "no" },
: { "3", "male", "30", "yes" }, };
: String query = "select id, gender, age from table where gender = male";

avatar
b*n
6
需要写现场可以运行的代码
求思路
用什么数据结构
比如说有下面的数据 和 sql query, 让输出结果
String[][] data = {
{ "id", "gender", "age", "job" },
{ "1", "male", "10", "yes" },
{ "2", "female", "20", "no" },
{ "3", "male", "30", "yes" }, };
String query = "select id, gender, age from table where gender = male";
avatar
l*s
7
具体一些,解析的结果是怎样要求的?

【在 b*********n 的大作中提到】
: 需要写现场可以运行的代码
: 求思路
: 用什么数据结构
: 比如说有下面的数据 和 sql query, 让输出结果
: String[][] data = {
: { "id", "gender", "age", "job" },
: { "1", "male", "10", "yes" },
: { "2", "female", "20", "no" },
: { "3", "male", "30", "yes" }, };
: String query = "select id, gender, age from table where gender = male";

avatar
a*5
8
应该是要实现一个简单的抽象语法树parser吧,parser本身可以用状态机来做
avatar
b*n
9
比如说有下面的数据 和 sql query, 让输出结果
String[][] data = {
{ "id", "gender", "age", "job" },
{ "1", "male", "10", "yes" },
{ "2", "female", "20", "no" },
{ "3", "male", "30", "yes" }, };
String query = "select id, gender, age from table where gender = male";

【在 l******s 的大作中提到】
: 具体一些,解析的结果是怎样要求的?
avatar
l*s
10
首先,Table一定是一个List,那么需要示意地定义几个类或接口IObject1,
IObject2准备被from 选用。
选用一个Hashmap,mapping From的Table名字字符串和List的变量。
假设有
IList list = new List();
list.Add(...);...
map[table] = list;
从易到难,单表查询且没有Group By开始,写一个解析器存入三个字符组string[]
select,string[] from,KeyValuePair[] where
三个参数的函数
public IList> Retrieve(string[] select, string[] from,
KeyValuePair[] where){
...
//在.Net中Linq可以简化为
return map[from[0]].Select(select[0], select[1], ...).Where(where.Key =
where.Value);
}
然后加上多表Join,这里用DI Container好一些,因为表的数量不定,Group By比较麻
烦,相信面试时候这两样也就说说,代码是写不完的。

【在 b*********n 的大作中提到】
: 比如说有下面的数据 和 sql query, 让输出结果
: String[][] data = {
: { "id", "gender", "age", "job" },
: { "1", "male", "10", "yes" },
: { "2", "female", "20", "no" },
: { "3", "male", "30", "yes" }, };
: String query = "select id, gender, age from table where gender = male";

avatar
l*h
11
这道题可不可以用直接用regex去match?

【在 b*********n 的大作中提到】
: 需要写现场可以运行的代码
: 求思路
: 用什么数据结构
: 比如说有下面的数据 和 sql query, 让输出结果
: String[][] data = {
: { "id", "gender", "age", "job" },
: { "1", "male", "10", "yes" },
: { "2", "female", "20", "no" },
: { "3", "male", "30", "yes" }, };
: String query = "select id, gender, age from table where gender = male";

avatar
l*h
12
如果只是最基本的Select from where,好像不难,比如
String query = "select id, gender, age from table where gender = male";
只要parse出来Target (id, gender, age) 和condition (gender='male').
就和Data的第一行比较,拿到index, 然后顺序scanData二维数组,
打印出结果。

【在 b*********n 的大作中提到】
: 需要写现场可以运行的代码
: 求思路
: 用什么数据结构
: 比如说有下面的数据 和 sql query, 让输出结果
: String[][] data = {
: { "id", "gender", "age", "job" },
: { "1", "male", "10", "yes" },
: { "2", "female", "20", "no" },
: { "3", "male", "30", "yes" }, };
: String query = "select id, gender, age from table where gender = male";

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。