diff --git a/applications/plugins/org.csstudio.archive.reader.rdb/preferences.ini b/applications/plugins/org.csstudio.archive.reader.rdb/preferences.ini index fa77b06a56c..04014f24d07 100644 --- a/applications/plugins/org.csstudio.archive.reader.rdb/preferences.ini +++ b/applications/plugins/org.csstudio.archive.reader.rdb/preferences.ini @@ -27,5 +27,8 @@ fetch_size=1000 # MySQL: # use_stored_procedure=archive.get_browser_data +# PostgreSQL +# use_stored_procedure=public.get_browser_data + # Don't use stored procedure -use_stored_procedure= \ No newline at end of file +use_stored_procedure= diff --git a/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/RDBArchiveReader.java b/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/RDBArchiveReader.java index 7b5ebfd3ffe..46af8379f68 100644 --- a/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/RDBArchiveReader.java +++ b/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/RDBArchiveReader.java @@ -114,7 +114,7 @@ public RDBArchiveReader(final String url, final String user, break; case PostgreSQL: is_oracle = false; - this.stored_procedure = ""; + this.stored_procedure = stored_procedure; break; case Oracle: is_oracle = true; diff --git a/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/StoredProcedureValueIterator.java b/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/StoredProcedureValueIterator.java index 8c00382f77b..c70e2c6a2ec 100644 --- a/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/StoredProcedureValueIterator.java +++ b/applications/plugins/org.csstudio.archive.reader.rdb/src/org/csstudio/archive/reader/rdb/StoredProcedureValueIterator.java @@ -10,8 +10,12 @@ import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; +import java.sql.Types; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.sql.Date; import java.util.List; +import java.util.TimeZone; import java.util.logging.Level; import java.util.logging.Logger; @@ -81,6 +85,9 @@ private void executeProcedure(final Timestamp start, final Timestamp end, case MySQL: sql = "{call " + stored_procedure + "(?, ?, ?, ?)}"; break; + case PostgreSQL: + sql = "{? = call " + stored_procedure + "(?, ?, ?, ?)}"; + break; case Oracle: sql = "begin ? := " + stored_procedure + "(?, ?, ?, ?); end;"; break; @@ -104,6 +111,26 @@ private void executeProcedure(final Timestamp start, final Timestamp end, statement.setInt(4, count); result = statement.executeQuery(); } + else if(dialect == RDBUtil.Dialect.PostgreSQL) + { //PostgreSQL + boolean autoCommit = reader.getRDB().getConnection().getAutoCommit(); + // Disable auto-commit to determine sample with PostgreSQL when fetch direction is FETCH_FORWARD + if (autoCommit) { + reader.getRDB().getConnection().setAutoCommit(false); + } + statement.registerOutParameter(1, Types.OTHER); + statement.setLong(2, channel_id); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + statement.setString(3, sdf.format(new Date(TimestampHelper.toSQLTimestamp(start).getTime()))); + statement.setString(4, sdf.format(new Date(TimestampHelper.toSQLTimestamp(end).getTime()))); + statement.setLong(5, count); + statement.setFetchDirection(ResultSet.FETCH_FORWARD); + statement.setFetchSize(1000); + statement.execute(); + result = (ResultSet) statement.getObject(1); + } + else { //ORACLE statement.registerOutParameter(1, OracleTypes.CURSOR); @@ -246,5 +273,14 @@ public void close() super.close(); index = -1; values = null; + if (reader.getRDB().getDialect() == Dialect.PostgreSQL) { + // Restore default auto-commit on result set close + try { + reader.getRDB().getConnection().setAutoCommit(true); + } catch (Exception e) { + // Ignore + } + } + } } diff --git a/products/ITER/features/org.eclipse.iter.ui.feature/feature.xml b/products/ITER/features/org.eclipse.iter.ui.feature/feature.xml index 06fd054b38d..50519bfe1df 100644 --- a/products/ITER/features/org.eclipse.iter.ui.feature/feature.xml +++ b/products/ITER/features/org.eclipse.iter.ui.feature/feature.xml @@ -88,7 +88,7 @@ of the distribution package. - + diff --git a/products/ITER/products/org.csstudio.iter.alarm.beast.server.product/demo/m-TEST-BEAST/src/main/beast/jms.ini b/products/ITER/products/org.csstudio.iter.alarm.beast.server.product/demo/m-TEST-BEAST/src/main/beast/jms.ini index 6606b40c458..2366c86ac17 100755 --- a/products/ITER/products/org.csstudio.iter.alarm.beast.server.product/demo/m-TEST-BEAST/src/main/beast/jms.ini +++ b/products/ITER/products/org.csstudio.iter.alarm.beast.server.product/demo/m-TEST-BEAST/src/main/beast/jms.ini @@ -1,7 +1,9 @@ org.csstudio.logging.jms2rdb/httpd_port=4914 org.csstudio.logging.jms2rdb/jms_url=failover:(tcp://localhost:61616) org.csstudio.logging.jms2rdb/jms_topic=demo_SERVER, demo_CLIENT, demo_TALK, LOG, TALK, WRITE -org.csstudio.logging.jms2rdb/rdb_url=jdbc:postgresql://localhost/css_log_3_0_0?user=log&password=$log +org.csstudio.logging.jms2rdb/rdb_url=jdbc:postgresql://localhost/css_log_3_0_0 +org.csstudio.logging.jms2rdb/rdb_user=log_ro +org.csstudio.logging.jms2rdb/rdb_password=$log org.csstudio.logging.jms2rdb/rdb_schema= diff --git a/products/ITER/products/org.csstudio.iter.css.product/css.sh b/products/ITER/products/org.csstudio.iter.css.product/css.sh index cbfb90b93c2..5eb290af059 100755 --- a/products/ITER/products/org.csstudio.iter.css.product/css.sh +++ b/products/ITER/products/org.csstudio.iter.css.product/css.sh @@ -1,8 +1,8 @@ #!/bin/bash #+====================================================================== -# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-css-iter/trunk/org.csstudio.iter.css.product/css.sh $ -# $Id: css.sh 31100 2012-10-23 20:17:15Z zagara $ +# $HeadURL: https://svnpub.iter.org/codac/iter/codac/dev/units/m-css/trunk/products/ITER/products/org.csstudio.iter.css.product/css.sh $ +# $Id: css.sh 49232 2014-08-25 15:17:45Z zagara $ # # Project : CODAC Core System # @@ -28,23 +28,25 @@ CODAC_ROOT=$(readlink -f "$0" | sed -n -e 's|^\(/[^/]*/[^/]*\)/.*|\1|p') # If user args do not contain any argument starting with - # add --launcher.openFile before to interpret them as files to open -OPEN_FILE_ARG="--launcher.openFile" -USER_ARGS="" +OPEN_FILES=() +USER_ARGS=() while [ -n "$1" ]; do case $1 in + --launcher.openFile) + ;; + -*) + USER_ARGS=("${USER_ARGS[@]}" "$1") + ;; *) - USER_ARGS="${USER_ARGS:+${USER_ARGS} }\"$1\""; - if [[ "${1:0:1}" == "-" ]]; then - OPEN_FILE_ARG=""; - fi - shift 1;; + OPEN_FILES=("${OPEN_FILES[@]}" "$(readlink -fm "$1")") + ;; esac + shift 1 done -if [[ USER_ARGS != "" ]]; then - USER_ARGS="${OPEN_FILE_ARG} ${USER_ARGS}" +if [ ${#OPEN_FILES[@]} -gt 0 ]; then + USER_ARGS=("${USER_ARGS[@]}" "--launcher.openFile" "${OPEN_FILES[@]}") fi - -set -- ${USER_ARGS} -share_link /opt/codac/opi=CSS/opi,/opt/codac/examples=CSS/examples,/opt/codac/opi/boy/SymbolLibrary=CSS/SymbolLibrary +set -- -share_link /opt/codac/opi=CSS/opi,/opt/codac/examples=CSS/examples,/opt/codac/opi/boy/SymbolLibrary=CSS/SymbolLibrary "${USER_ARGS[@]}" . ${CODAC_ROOT}/bin/codacenv . ${CODAC_ROOT}/bin/css-wrapper-script diff --git a/products/ITER/products/org.csstudio.iter.css.product/plugin_customization.ini b/products/ITER/products/org.csstudio.iter.css.product/plugin_customization.ini index 09efe20ea64..7d3d8157cce 100644 --- a/products/ITER/products/org.csstudio.iter.css.product/plugin_customization.ini +++ b/products/ITER/products/org.csstudio.iter.css.product/plugin_customization.ini @@ -113,6 +113,9 @@ org.csstudio.utility.pvmanager.loc/zero_initialization=true org.csstudio.trends.databrowser2/urls=jdbc:postgresql://localhost/css_archive_3_0_0|Archive RDB org.csstudio.trends.databrowser2/email_default_sender=CSS Data Browser +#PostgreSQL stored procedure +org.csstudio.archive.reader.rdb/use_stored_procedure=public.get_browser_data + # Default data sources for newly added channels # Format: || # xnds: URLs use the key. Other URLs might ignore the key. diff --git a/products/ITER/products/org.csstudio.iter.jms2rdb.product/plugin_customization.ini b/products/ITER/products/org.csstudio.iter.jms2rdb.product/plugin_customization.ini index 09e01db6695..8cbb194716c 100755 --- a/products/ITER/products/org.csstudio.iter.jms2rdb.product/plugin_customization.ini +++ b/products/ITER/products/org.csstudio.iter.jms2rdb.product/plugin_customization.ini @@ -2,7 +2,9 @@ org.csstudio.logging.jms2rdb/jms_topic=CODAC_AlarmHandler_SERVER, CODAC_AlarmHandler_CLIENT, CODAC_AlarmHandler_TALK, LOG, TALK, WRITE # Database connection -org.csstudio.logging.jms2rdb/rdb_url=jdbc:postgresql://localhost/css_log_3_0_0?user=log&password=$log +org.csstudio.logging.jms2rdb/rdb_url=jdbc:postgresql://localhost/css_log_3_0_0 +org.csstudio.logging.jms2rdb/rdb_user=log_ro +org.csstudio.logging.jms2rdb/rdb_password=$log # Logging preferences org.csstudio.logging/file_level=CONFIG