docs: public ResultSet executeQuery(String strSQL, int iType, Vector<BaseField> vParamList)
          throws DBException
      {
          ResultSet resultSet = null;
          m_bSelectAllFields = false;
          m_rgiFieldColumns = null;
          try   {
              Utility.getLogger().info(strSQL);
              if (SQLParams.USE_SELECT_LITERALS)
              {
                  if (this.getStatement(iType) instanceof PreparedStatement)
                      this.setStatement(null, iType); // Close old prepared statement
                  if (this.getStatement(iType) == null)
                      this.setStatement(((JdbcDatabase)this.getDatabase()).getJDBCConnection().createStatement(), iType);
                  resultSet = this.getStatement(iType).executeQuery(strSQL);
              }
              else
              {
                  if (this.getStatement(iType) != null)
                  {
                      if (!strSQL.equals(this.getLastSQLStatement(iType)))
                          this.setStatement(null, iType);   // Not the same as last time.
                  }
                  if (this.getStatement(iType) == null)
                      this.setStatement(((JdbcDatabase)this.getDatabase()).getJDBCConnection().prepareStatement(strSQL), iType);
                  this.setLastSQLStatement(strSQL, iType);
                  m_iNextParam = 1;           // First param row
                  this.getRecord().getKeyArea(0); // Primary index
                  if ((iType == DBConstants.SQL_SELECT_TYPE) || (iType == DBConstants.SQL_AUTOSEQUENCE_TYPE) || (iType == DBConstants.SQL_SEEK_TYPE)) // Have WHERE X=?
                  {
                      if (vParamList != null)
                      {
                          for (Enumeration<BaseField> e = vParamList.elements() ; e.hasMoreElements() ;)
                          {
                              BaseField field = e.nextElement();
                              field.getSQLFromField((PreparedStatement)this.getStatement(iType), iType, m_iNextParam);
                              m_iNextParam++;
                          }
                      }
                  }
                  resultSet = ((PreparedStatement)this.getStatement(iType)).executeQuery();
              }
          } catch (SQLException e)    {
              DBException ex = this.getDatabase().convertError(e);
              if (this.createIfNotFoundError(ex))
              { // Table not found, the previous line created the table, re-do the query.
                  this.getRecord().setOpenMode((this.getRecord().getOpenMode() | DBConstants.OPEN_DONT_CREATE));   // Only try to create once.
                  return this.executeQuery(strSQL, iType, vParamList);
              }
              else if (ex.getErrorCode() == DBConstants.BROKEN_PIPE)
              { // If there is a pipe timeout or a broken pipe, try to re-establish the connection and try again
                  if (!m_bInRecursiveCall)
                  {
                      m_bInRecursiveCall = true;
  
                      this.close();
                      this.getDatabase().close();     // Next access will force an open.
                      ResultSet result = this.executeQuery(strSQL, iType, vParamList);
  
                      m_bInRecursiveCall = false;
                      return result;
                  }
              }
              throw ex;
          }
          if (strSQL.indexOf('*') != -1)
          {
              m_bSelectAllFields = true;
              m_iColumn = 1;  // First column
          }
          return resultSet;
      }