Beispiel #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));
            }
        }
Beispiel #2
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));
            }
        }