private Sql elements ( int op , Uri uri , String [ ] proj , String sel , String [ ] args , String order ) { MutableSql sql = translate ( uri ) ; if ( sql == null ) { sql = Sql . create ( ) ; } if ( sql . table ( ) == null ) { sql . table ( uri . getPathSegments ( ) . get ( 0 ) ) ; } if ( sql . notifyUri ( ) == null && op != SELECT ) { sql . notifyUri ( uri . buildUpon ( ) . path ( sql . table ( ) ) . clearQuery ( ) . fragment ( null ) . build ( ) ) ; } if ( op != INSERT ) { // run the query and return the cursor String from = sql . join ( ) != null ? sql . table ( ) + ' ' + sql . join ( ) : sql . table ( ) ; if ( ( sql . sel ( ) == null || sql . args ( ) == null ) && uri . getPathSegments ( ) . size ( ) == 2 ) { try { // filter on ID if URI in /table/id format long id = ContentUris . parseId ( uri ) ; if ( id > 0 ) { if ( sql . sel ( ) == null ) { sql . sel ( "rowid = ?" ) ; } if ( sql . args ( ) == null ) { sql . args ( String . valueOf ( id ) ) ; } } } catch ( NumberFormatException e ) { // last segment not a number } } if ( sel != null ) { // append caller values sql . sel ( DatabaseUtils . concatenateWhere ( sql . sel ( ) , sel ) ) ; } if ( args != null ) { sql . args ( DatabaseUtils . appendSelectionArgs ( sql . args ( ) , args ) ) ; } String groupBy = uri . getQueryParameter ( GROUP_BY ) ; if ( groupBy != null ) { // prefer caller's value sql . groupBy ( groupBy ) ; } String having = uri . getQueryParameter ( HAVING ) ; if ( having != null ) { sql . having ( having ) ; } if ( order != null ) { sql . orderBy ( order ) ; } String limit = uri . getQueryParameter ( LIMIT ) ; if ( limit != null ) { sql . limit ( limit ) ; } sql . mResult = mHelper . getReadableDatabase ( ) . query ( from , proj , sql . sel ( ) , sql . args ( ) , sql . groupBy ( ) , sql . having ( ) , sql . orderBy ( ) , sql . limit ( ) ) ; } return sql ; }
Get the updated SQL elements for the URI and when not inserting a cursor with the query results .