/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library 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 2.1 of the License, or (at your option) * any later version. * * This library 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. */ package com.liferay.portal.dao.orm.hibernate; import com.liferay.portal.kernel.dao.orm.CacheMode; import com.liferay.portal.kernel.dao.orm.LockMode; import com.liferay.portal.kernel.dao.orm.ORMException; import com.liferay.portal.kernel.dao.orm.Query; import com.liferay.portal.kernel.dao.orm.SQLQuery; import com.liferay.portal.kernel.dao.orm.ScrollableResults; import com.liferay.portal.kernel.dao.orm.Type; import com.liferay.portal.kernel.security.pacl.DoPrivileged; import com.liferay.portal.kernel.security.pacl.NotPrivileged; import com.liferay.portal.kernel.util.ListUtil; import com.liferay.portal.kernel.util.StringBundler; import java.io.Serializable; import java.sql.Timestamp; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; /** * @author Brian Wing Shun Chan * @author Shuyang Zhou */ @DoPrivileged public class SQLQueryImpl implements SQLQuery { public SQLQueryImpl(org.hibernate.SQLQuery sqlQuery, boolean strictName) { _sqlQuery = sqlQuery; _strictName = strictName; String[] names = null; if (!_strictName) { names = sqlQuery.getNamedParameters(); Arrays.sort(names); } _names = names; } @Override public SQLQuery addEntity(String alias, Class<?> entityClass) { _sqlQuery.addEntity(alias, entityClass); return this; } @Override public SQLQuery addScalar(String columnAlias, Type type) { _sqlQuery.addScalar(columnAlias, TypeTranslator.translate(type)); return this; } @Override public SQLQuery addSynchronizedEntityClass(Class<?> entityClass) { _sqlQuery.addSynchronizedEntityClass(entityClass); return this; } @Override public SQLQuery addSynchronizedEntityClasses(Class<?>... entityClasses) { for (Class<?> entityClass : entityClasses) { _sqlQuery.addSynchronizedEntityClass(entityClass); } return this; } @Override public SQLQuery addSynchronizedEntityName(String entityName) { _sqlQuery.addSynchronizedEntityName(entityName); return this; } @Override public SQLQuery addSynchronizedEntityNames(String... entityNames) { for (String entityName : entityNames) { _sqlQuery.addSynchronizedEntityName(entityName); } return this; } @Override public SQLQuery addSynchronizedQuerySpace(String querySpace) { _sqlQuery.addSynchronizedQuerySpace(querySpace); return this; } @Override public SQLQuery addSynchronizedQuerySpaces(String... querySpaces) { for (String querySpace : querySpaces) { _sqlQuery.addSynchronizedQuerySpace(querySpace); } return this; } @NotPrivileged @Override public int executeUpdate() throws ORMException { try { return _sqlQuery.executeUpdate(); } catch (Exception e) { throw ExceptionTranslator.translate(e); } } @NotPrivileged @Override @SuppressWarnings("rawtypes") public Iterator iterate() throws ORMException { return iterate(true); } @NotPrivileged @Override @SuppressWarnings("rawtypes") public Iterator iterate(boolean unmodifiable) throws ORMException { try { return list(unmodifiable).iterator(); } catch (Exception e) { throw ExceptionTranslator.translate(e); } } @NotPrivileged @Override public Object iterateNext() throws ORMException { Iterator<?> iterator = iterate(false); if (iterator.hasNext()) { return iterator.next(); } return null; } @NotPrivileged @Override public List<?> list() throws ORMException { return list(false, false); } @NotPrivileged @Override public List<?> list(boolean unmodifiable) throws ORMException { return list(true, unmodifiable); } @NotPrivileged @Override public List<?> list(boolean copy, boolean unmodifiable) throws ORMException { try { List<?> list = _sqlQuery.list(); if (unmodifiable) { list = Collections.unmodifiableList(list); } else if (copy) { list = ListUtil.copy(list); } return list; } catch (Exception e) { throw ExceptionTranslator.translate(e); } } @NotPrivileged @Override public ScrollableResults scroll() throws ORMException { try { return new ScrollableResultsImpl(_sqlQuery.scroll()); } catch (Exception e) { throw ExceptionTranslator.translate(e); } } @Override public Query setBoolean(int pos, boolean value) { _sqlQuery.setBoolean(pos, value); return this; } @Override public Query setBoolean(String name, boolean value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setBoolean(name, value); return this; } @Override public Query setCacheable(boolean cacheable) { _sqlQuery.setCacheable(cacheable); return this; } @Override public Query setCacheMode(CacheMode cacheMode) { _sqlQuery.setCacheMode(CacheModeTranslator.translate(cacheMode)); return this; } @Override public Query setCacheRegion(String cacheRegion) { _sqlQuery.setCacheRegion(cacheRegion); return this; } @Override public Query setDouble(int pos, double value) { _sqlQuery.setDouble(pos, value); return this; } @Override public Query setDouble(String name, double value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setDouble(name, value); return this; } @Override public Query setFirstResult(int firstResult) { _sqlQuery.setFirstResult(firstResult); return this; } @Override public Query setFloat(int pos, float value) { _sqlQuery.setFloat(pos, value); return this; } @Override public Query setFloat(String name, float value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setFloat(name, value); return this; } @Override public Query setInteger(int pos, int value) { _sqlQuery.setInteger(pos, value); return this; } @Override public Query setInteger(String name, int value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setInteger(name, value); return this; } @Override public Query setLockMode(String alias, LockMode lockMode) { _sqlQuery.setLockMode(alias, LockModeTranslator.translate(lockMode)); return this; } @Override public Query setLong(int pos, long value) { _sqlQuery.setLong(pos, value); return this; } @Override public Query setLong(String name, long value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setLong(name, value); return this; } @Override public Query setMaxResults(int maxResults) { _sqlQuery.setMaxResults(maxResults); return this; } @Override public Query setSerializable(int pos, Serializable value) { _sqlQuery.setSerializable(pos, value); return this; } @Override public Query setSerializable(String name, Serializable value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setSerializable(name, value); return this; } @Override public Query setShort(int pos, short value) { _sqlQuery.setShort(pos, value); return this; } @Override public Query setShort(String name, short value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setShort(name, value); return this; } @Override public Query setString(int pos, String value) { _sqlQuery.setString(pos, value); return this; } @Override public Query setString(String name, String value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setString(name, value); return this; } @Override public Query setTimestamp(int pos, Timestamp value) { _sqlQuery.setTimestamp(pos, value); return this; } @Override public Query setTimestamp(String name, Timestamp value) { if (!_strictName && (Arrays.binarySearch(_names, name) < 0)) { return this; } _sqlQuery.setTimestamp(name, value); return this; } @Override public String toString() { StringBundler sb = new StringBundler(7); sb.append("{names="); sb.append(Arrays.toString(_names)); sb.append(", _sqlQuery="); sb.append(String.valueOf(_sqlQuery)); sb.append(", _strictName="); sb.append(_strictName); sb.append("}"); return sb.toString(); } @NotPrivileged @Override public Object uniqueResult() throws ORMException { try { return _sqlQuery.uniqueResult(); } catch (Exception e) { throw ExceptionTranslator.translate(e); } } private final String[] _names; private final org.hibernate.SQLQuery _sqlQuery; private final boolean _strictName; }