![JAR search and dependency download from the Maven repository](/logo.png)
com.tsc9526.monalisa.orm.dialect.OracleDialect Maven / Gradle / Ivy
/*******************************************************************************************
* Copyright (c) 2016, zzg.zhou([email protected])
*
* Monalisa is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*******************************************************************************************/
package com.tsc9526.monalisa.orm.dialect;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import javax.sql.DataSource;
import oracle.jdbc.driver.OracleConnection;
import com.tsc9526.monalisa.orm.Query;
import com.tsc9526.monalisa.orm.annotation.Column;
import com.tsc9526.monalisa.orm.datasource.DBConfig;
import com.tsc9526.monalisa.orm.datasource.SimpleDataSource;
import com.tsc9526.monalisa.orm.meta.MetaTable.CreateTable;
import com.tsc9526.monalisa.orm.model.Model;
import com.tsc9526.monalisa.tools.clazz.MelpClass.FGS;
/**
*
* @author zzg.zhou([email protected])
*/
@SuppressWarnings({ "rawtypes"})
public class OracleDialect extends Dialect{
@Override
public String getUrlPrefix() {
return "jdbc:oracle:thin:@//";
}
@Override
public String getDriver() {
return "oracle.jdbc.driver.OracleDriver";
}
@Override
public String geCatalog(String jdbcUrl) {
return null;
}
@Override
public String getSchema(String jdbcUrl) {
//jdbc:oracle:thin:@//172.16.95.218/qndbzhu
String schema = "";
String prefix = getUrlPrefix();
if (jdbcUrl.startsWith(prefix)) {
int p = jdbcUrl.indexOf('/', prefix.length());
if (p > 0) {
schema = jdbcUrl.substring(p + 1);
p = schema.indexOf('?');
if (p > 0) {
schema = schema.substring(0, p);
}
}
}
return schema;
}
@Override
public String getColumnName(String name) {
if (name.startsWith("\"")) {
return name;
} else {
return "\"" + name + "\"";
}
}
@Override
public String getTableName(String name) {
return getColumnName(name);
}
public String getLimitSql(String orignSql, int limit,int offset){
String sql = orignSql.trim();
boolean isForUpdate = false;
if ( sql.toLowerCase().endsWith(" for update") ) {
sql = sql.substring( 0, sql.length()-11 );
isForUpdate = true;
}
StringBuilder pagingSelect = new StringBuilder( sql.length()+100 );
if (offset>0) {
pagingSelect.append("SELECT * FROM ( SELECT row_.*, rownum rownum_ FROM ( ");
}
else {
pagingSelect.append("SELECT * FROM ( ");
}
pagingSelect.append(sql);
if (offset>0) {
pagingSelect.append(" ) row_ ) WHERE rownum <= "+limit+" and rownum_ > "+offset);
}
else {
pagingSelect.append(" ) WHERE rownum <= "+limit);
}
if ( isForUpdate ) {
pagingSelect.append( " FOR UPDATE" );
}
return pagingSelect.toString();
}
public Query insertOrUpdate(Model model){
List uniqueFields = getUniqueFields(model);
if(uniqueFields.isEmpty()){
return insert(model);
}
Query query=createQuery();
query.add("MERGE INTO ").add(getTableName(model.table())).add(" m USING dual ON (");
int i=0;
Set unames=new LinkedHashSet();
for(FGS fgs:uniqueFields){
Object v=fgs.getObject(model);
if(i>0){
query.add(" AND ");
}
Column c=fgs.getAnnotation(Column.class);
query.add(getColumnName(c.name()) + " = ?",v);
unames.add(fgs.getFieldName());
i++;
}
query.add(")");
query.add("\r\n WHEN NOT MATCHED THEN INSERT ");
addNameValues(query,model);
i=0;
StringBuilder updateSql = new StringBuilder("\r\n WHEN MATCHED THEN UPDATE SET ");
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy