code: public Cursor rawQueryWithFactory(
              CursorFactory cursorFactory, String sql, String[] selectionArgs,
              String editTable, CancellationSignal cancellationSignal) {
          acquireReference();
          try {
              SQLiteCursorDriver driver = new SQLiteDirectCursorDriver(this, sql, editTable,
                      cancellationSignal);
              return driver.query(cursorFactory != null ? cursorFactory : mCursorFactory,
                      selectionArgs);
          } finally {
              releaseReference();
          }
      }
docs: Runs the provided SQL and returns a cursor over the result set.
  
  @param cursorFactory the cursor factory to use, or null for the default factory
  @param sql the SQL query. The SQL string must not be ; terminated
  @param selectionArgs You may include ?s in where clause in the query,
  which will be replaced by the values from selectionArgs. The
  values will be bound as Strings.
  @param editTable the name of the first table, which is editable
  @param cancellationSignal A signal to cancel the operation in progress, or null if none.
  If the operation is canceled, then {@link OperationCanceledException} will be thrown
  when the query is executed.
  @return A {@link Cursor} object, which is positioned before the first entry. Note that
  {@link Cursor}s are not synchronized, see the documentation for more details.