code: @Override
      public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
          Cursor result = null;
  
          if (!controller.hasPreinitialized()) {
              throw new IllegalStateException("Controller has not been initialized.");
          }
  
          int patternCode = controller.getUriMatcher().match(uri);
          MatcherPattern pattern = controller.findMatcherPattern(patternCode);
          if (pattern == null) {
              throw new IllegalArgumentException("unknown uri : " + uri.toString());
          }
  
          Parameter parameter = new Parameter(uri, projection, selection, selectionArgs, sortOrder);
          SQLiteDatabase db = this.getHelper().getReadableDatabase();
  
          result = onQuery(this.getHelper(), db, pattern, parameter);
          if (result != null) {
              this.onQueryCompleted(result, uri, pattern, parameter);
          }
          return result;
      }
docs: /*
  @see android.content.ContentProvider#query(android.net.Uri, java.lang.String[],
  java.lang.String, java.lang.String[], java.lang.String)