/// <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)); } }
/// <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)); } }