Esempio n. 1
0
        /// <summary>
        /// Executes the given SQL character sequence directly,
        /// returning a scalar value.
        /// </summary>
        /// <param name="sql">
        /// The SQL character sequence to execute.
        /// </param>
        /// <returns>
        /// A scalar value representing the result of the execution.
        /// </returns>
        internal object ExecuteScalarDirect(string sql)
        {
            Request request = s_protocol.CreateExecuteDirectRequest(sql);

            s_protocol.SetMaxRows(request, 1);

            Response response = Execute(request);

            if (response.isUpdateCount() ||
                0 >= response.getColumnCount() ||
                response.isEmpty())
            {
                return(null);
            }

            object value = response.rRoot.data[0];

            if (value == null)
            {
                return(null);
            }
            else if (value is string)
            {
                return(value);
            }
            else
            {
                int type = response.metaData.colTypes[0];

                return(HsqlConvert.FromJava.ToObject(value, type));
            }
        }
Esempio n. 2
0
 public HsqlDataReader(org.hsqldb.Result result)
 {
     if (result == null)
     {
         throw new ArgumentNullException("result");
     }
     else if (result.isError())
     {
         throw new HsqlDataSourceException(result);
     }
     else if (result.isUpdateCount())
     {
         m_recordsAffected = result.getUpdateCount();
     }
     else if (result.isData())
     {
         m_recordsAffected = -1;
         m_result          = result;
         m_fieldCount      = result.getColumnCount();
         m_metaData        = result.metaData;
         m_columnTypes     = m_metaData.colTypes;
     }
     else
     {
         throw new InvalidOperationException(
                   "Unhandled Result Mode: " + result.mode);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Executes the given prepared request, returning a scalar value.
        /// </summary>
        /// <param name="request">The prepared request.</param>
        /// <returns>
        /// The scalar value. This is the first column of first row;
        /// <c>null</c> when the result has no columns or no rows.
        /// </returns>
        internal object ExecuteScalarPrepared(Request request)
        {
            s_protocol.SetMaxRows(request, 1);

            Response response = Execute(request);

            if (response.isUpdateCount() ||
                (0 >= response.getColumnCount()) ||
                response.isEmpty())
            {
                return(null);
            }

            // No check for null pointers or array bounds violation.
            // We cannot get this far and still
            // have a rRoot == null, rRoot.data == null or
            // rRoot.data.Length < 1 condition, unless
            // there is an actual (and serious) bug in the
            // underlying libraries.
            object value = response.rRoot.data[0];

            if (value == null)
            {
                return(null);
            }
            else if (value is string)
            {
                return(value);
            }
            else
            {
                int type = response.metaData.colTypes[0];

                return(HsqlConvert.FromJava.ToObject(value, type));
            }
        }