一、问题描述:
原来的别名模型对象AliasModel用来存放所有别名,这样无法区别是表别名还是字段别名,设置英文别名时,如果存在表别名,则字段将变成"表 AS 表英文别名.字段",如表中文别名(传票对照表)对应的英文别名为(CNF_TABLE)时,字段“AI_94传票对照表.省/市代号”的英文会变成
CNF as CNF_TABLE.CNF01。这是错误的。
二、修改内容:
1、增加表别名模型对象TableAliasModel。
2、修改语法文件的TreeParser,当遍历语法树中发现表别名时,则创建TableAliasModel对象,并加入到model中。
table_name returns [TableModel model]
{AliasModel a; model=null; TableAliasModel ta;}
: t:ID
{model=new TableModel(t.getText());}
// | #("as" t1:ID a=alias)
// {model=new TableModel(t1.getText()); model.setAlias(a);}
// | #("作为" t2:ID a = alias)
// {model = new TableModel(t2.getText()); model.setAlias(a);}
| #("as" t1:ID ta = tableAlias)
{model = new TableModel(t1.getText()); model.setAlias(ta);}
| #("作为" t2:ID ta = tableAlias)
{model = new TableModel(t2.getText()); model.setAlias(ta);}
;
tableAlias returns [TableAliasModel model]
{model=null;}
: a1:QUOTED_STRING
{model = new TableAliasModel(a1.getText());}
| a2:ID
{model = new TableAliasModel(a2.getText());}
;
3、修改了TableModel的getChString()和getEnString()方法,改成从TableAliasModel获取中英文别名信息。
4、修改了FieldModel的getEnString()方法,在取得tableEnName时,判断是否存在别名,如果存在,则取英文别名。
String ret = fieldEnName;
//如果存在英文表名
if (tableEnName != null && tableEnName.length() > 0){
String[] tableEnNameArr = tableEnName.split(" as ");
//如果英文表名中存在别名(CNF AS CNF2007),则英文表名为英文别名CNF2007
if (tableEnNameArr != null && tableEnNameArr.length > 0 && tableEnNameArr.length == 2){
if (tableEnNameArr[1] != null && !tableEnNameArr[1].equals(""))
tableEnName = tableEnNameArr[1].trim();
}
ret = tableEnName + "." + ret;
}
return ret;
三、调用方法:
如果需要设置表的英文别名时,必须在t.addDbTable("AI_94传票对照表", "CNF"); t.addDbField("AI_94传票对照表", "省/市代号", "CNF01")之前进行设置,否则无效。
QueryModel[] tableAliasModelArr = t.getQueryModel().getModelsFromAllChildrenByClass(TableAliasModel.class);
for (int i = 0; i < tableAliasModelArr.length; i++){
System.out.println(tableAliasModelArr[i].getChString());
TableAliasModel aliasModel = (TableAliasModel) tableAliasModelArr[i];
aliasModel.setEnAlias("CNF20070101");
System.out.println(tableAliasModelArr[i].getEnString());
}
posted on 2007-04-03 11:33
LORD BLOG 阅读(834)
评论(0) 编辑 收藏 所属分类:
工作日志