package jef.database;
import jef.database.support.RDBMS;
import jef.tools.StringUtils;
/**
* 一个命名查询的SQL,通过链表的方式记录了不同RDBMS下的不同的命名查询
* @author jiyi
*
*/
final class NQEntry{
public NQEntry(NamedQueryConfig namedQueryConfig, RDBMS type,String source) {
this.config=namedQueryConfig;
this.dialect=type;
this.source=source;
}
//方言信息
NQEntry next;
RDBMS dialect;
NamedQueryConfig config;
private String source;
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public NamedQueryConfig get(RDBMS type) {
if(type==null)return config;
NQEntry current=this;
while(current!=null){
if(current.dialect==type)return current.config;
current=current.next;
}
if(this.dialect==null)
return config;//注意将通用的dialect要放在链表的第一位
/*
* 当没有专用SQL,也没有通用的SQL的时候,抛出异常
*/
throw new IllegalArgumentException("Can not found NamedQuery ["+config.getName()+"] for "+type+".");
}
public String getTag() {
String tag=null;
NQEntry current=this;
while(current!=null){
tag=current.config.getTag();
if(StringUtils.isNotEmpty(tag)){
return tag;
}
current=current.next;
}
return null;
}
}