📄 basepeer.java
字号:
if (pk.getType() instanceof Number) { id = new NumberKey(keyGen.getIdAsBigDecimal(con, keyInfo)); } else { id = new StringKey(keyGen.getIdAsString(con, keyInfo)); } } catch (Exception e) { throwTorqueException(e); } } return id; } /** * Grouping of code used in both doInsert() and doUpdate() * methods. Sets up a Record for saving. * * @param rec A Record. * @param tableName Name of table. * @param criteria A Criteria. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ private static void insertOrUpdateRecord( Record rec, String tableName, Criteria criteria) throws TorqueException { DatabaseMap dbMap = Torque.getDatabaseMap(criteria.getDbName()); ColumnMap[] columnMaps = dbMap.getTable(tableName).getColumns(); boolean shouldSave = false; for (int j = 0; j < columnMaps.length; j++) { ColumnMap colMap = columnMaps[j]; String key = new StringBuffer(colMap.getTableName()) .append('.') .append(colMap.getColumnName()) .toString(); if (criteria.containsKey(key)) { // A village Record.setValue( String, Object ) would // be nice here. Object obj = criteria.getValue(key); if (obj instanceof SimpleKey) { obj = ((SimpleKey) obj).getValue(); } try { if (obj == null) { rec.setValueNull(colMap.getColumnName()); } else if (obj instanceof String) { rec.setValue(colMap.getColumnName(), (String) obj); } else if (obj instanceof Integer) { rec.setValue(colMap.getColumnName(), criteria.getInt(key)); } else if (obj instanceof BigDecimal) { rec.setValue(colMap.getColumnName(), (BigDecimal) obj); } else if (obj instanceof Boolean) { rec.setValue(colMap.getColumnName(), criteria.getBoolean(key) ? 1 : 0); } else if (obj instanceof java.util.Date) { rec.setValue(colMap.getColumnName(), (java.util.Date) obj); } else if (obj instanceof Float) { rec.setValue(colMap.getColumnName(), criteria.getFloat(key)); } else if (obj instanceof Double) { rec.setValue(colMap.getColumnName(), criteria.getDouble(key)); } else if (obj instanceof Byte) { rec.setValue(colMap.getColumnName(), ((Byte) obj).byteValue()); } else if (obj instanceof Long) { rec.setValue(colMap.getColumnName(), criteria.getLong(key)); } else if (obj instanceof Short) { rec.setValue(colMap.getColumnName(), ((Short) obj).shortValue()); } else if (obj instanceof Hashtable) { rec.setValue(colMap.getColumnName(), hashtableToByteArray((Hashtable) obj)); } else if (obj instanceof byte[]) { rec.setValue(colMap.getColumnName(), (byte[]) obj); } } catch (Exception e) { throwTorqueException(e); } shouldSave = true; } } if (shouldSave) { try { rec.save(); } catch (Exception e) { throwTorqueException(e); } } else { throw new TorqueException("No changes to save"); } } /** * Method to create an SQL query for display only based on values in a * Criteria. * * @param criteria A Criteria. * @return the SQL query for display * @exception TorqueException Trouble creating the query string. */ static String createQueryDisplayString(Criteria criteria) throws TorqueException { return createQuery(criteria).toString(); } /** * Build Oracle-style query with limit or offset. * If the original SQL is in variable: query then the requlting * SQL looks like this: * <pre> * SELECT B.* FROM ( * SELECT A.*, rownum as TORQUE$ROWNUM FROM ( * query * ) A * ) B WHERE B.TORQUE$ROWNUM > offset AND B.TORQUE$ROWNUM * <= offset + limit * </pre> * * @param query the query * @param limit * @param offset * @return oracle-style query */ private static String createOracleLimitOffsetQuery(Query query, int limit, int offset) { StringBuffer buf = new StringBuffer(); buf.append("SELECT B.* FROM ( "); buf.append("SELECT A.*, rownum AS TORQUE$ROWNUM FROM ( "); buf.append(query.toString()); buf.append(" ) A "); buf.append(" ) B WHERE "); if (offset > 0) { buf.append(" B.TORQUE$ROWNUM > "); buf.append(offset); if (limit > 0) { buf.append(" AND B.TORQUE$ROWNUM <= "); buf.append(offset + limit); } } else { buf.append(" B.TORQUE$ROWNUM <= "); buf.append(limit); } return buf.toString(); } /** * Method to create an SQL query for actual execution based on values in a * Criteria. * * @param criteria A Criteria. * @return the SQL query for actual execution * @exception TorqueException Trouble creating the query string. */ public static String createQueryString(Criteria criteria) throws TorqueException { Query query = createQuery(criteria); DB db = Torque.getDB(criteria.getDbName()); // Limit the number of rows returned. int limit = criteria.getLimit(); int offset = criteria.getOffset(); String sql; if ((limit > 0 || offset > 0) && db.getLimitStyle() == DB.LIMIT_STYLE_ORACLE) { sql = createOracleLimitOffsetQuery(query, limit, offset); criteria.setLimit(-1); criteria.setOffset(0); } else { if (offset > 0 && db.supportsNativeOffset()) { // Now set the criteria's limit and offset to return the // full resultset since the results are limited on the // server. criteria.setLimit(-1); criteria.setOffset(0); } else if (limit > 0 && db.supportsNativeLimit()) { // Now set the criteria's limit to return the full // resultset since the results are limited on the server. criteria.setLimit(-1); } sql = query.toString(); } if (log.isDebugEnabled()) { log.debug(sql); } return sql; } /** * Method to create an SQL query based on values in a Criteria. Note that * final manipulation of the limit and offset are performed when the query * is actually executed. * * @param criteria A Criteria. * @return the sql query * @exception TorqueException Trouble creating the query string. */ static Query createQuery(Criteria criteria) throws TorqueException { Query query = new Query(); DB db = Torque.getDB(criteria.getDbName()); DatabaseMap dbMap = Torque.getDatabaseMap(criteria.getDbName()); UniqueList selectModifiers = query.getSelectModifiers(); UniqueList selectClause = query.getSelectClause(); UniqueList fromClause = query.getFromClause(); UniqueList whereClause = query.getWhereClause(); UniqueList orderByClause = query.getOrderByClause(); UniqueList groupByClause = query.getGroupByClause(); UniqueList orderBy = criteria.getOrderByColumns(); UniqueList groupBy = criteria.getGroupByColumns(); UniqueList select = criteria.getSelectColumns(); Hashtable aliases = criteria.getAsColumns(); UniqueList modifiers = criteria.getSelectModifiers(); for (int i = 0; i < modifiers.size(); i++) { selectModifiers.add(modifiers.get(i)); } for (int i = 0; i < select.size(); i++) { String columnName = (String) select.get(i); if (columnName.indexOf('.') == -1 && columnName.indexOf('*') == -1) { throwMalformedColumnNameException("select", columnName); } String tableName = null; selectClause.add(columnName); int parenPos = columnName.indexOf('('); if (parenPos == -1) { tableName = columnName.substring(0, columnName.indexOf('.')); } else if (columnName.indexOf('.') > -1) { tableName = columnName.substring(parenPos + 1, columnName.indexOf('.')); // functions may contain qualifiers so only take the last // word as the table name. int lastSpace = tableName.lastIndexOf(' '); if (lastSpace != -1) { tableName = tableName.substring(lastSpace + 1); } } String tableName2 = criteria.getTableForAlias(tableName); if (tableName2 != null) { fromClause.add(new StringBuffer( tableName.length() + tableName2.length() + 1) .append(tableName2) .append(' ') .append(tableName) .toString()); } else { fromClause.add(tableName); } } Iterator it = aliases.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); selectClause.add((String) aliases.get(key) + " AS " + key); } Iterator critKeys = criteria.keySet().iterator(); while (critKeys.hasNext()) { String key = (String) critKeys.next(); Criteria.Criterion criterion = criteria.getCriterion(key); Criteria.Criterion[] someCriteria = criterion.getAttachedCriterion(); String table = null; for (int i = 0; i < someCriteria.length; i++) { String tableName = someCriteria[i].getTable(); table = criteria.getTableForAlias(tableName); if (table != null) { fromClause.add(new StringBuffer( tableName.length() + table.length() + 1) .append(table) .append(' ') .append(tableName) .toString()); } else { fromClause.add(tableName); table = tableName; } boolean ignorCase = ((criteria.isIgnoreCase() || someCriteria[i].isIgnoreCase()) && (dbMap .getTable(table) .getColumn(someCriteria[i].getColumn()) .getType() instanceof String)); someCriteria[i].setIgnoreCase(ignorCase); } criterion.setDB(db); whereClause.add(criterion.toString()); } List join = criteria.getJoinL(); if (join != null) { for (int i = 0; i < join.size(); i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -