// Path: src/com/google/android/apps/iosched/util/SelectionBuilder.java
// public class SelectionBuilder {
//     private static final String TAG = "SelectionBuilder";
//     private static final boolean LOGV = false;
// 
//     private String mTable = null;
//     private Map<String, String> mProjectionMap = Maps.newHashMap();
//     private StringBuilder mSelection = new StringBuilder();
//     private ArrayList<String> mSelectionArgs = Lists.newArrayList();
// 
//     /**
//      * Reset any internal state, allowing this builder to be recycled.
//      */
//     public SelectionBuilder reset() {
//         mTable = null;
//         mSelection.setLength(0);
//         mSelectionArgs.clear();
//         return this;
//     }
// 
//     /**
//      * Append the given selection clause to the internal state. Each clause is
//      * surrounded with parenthesis and combined using {@code AND}.
//      */
//     public SelectionBuilder where(String selection, String... selectionArgs) {
//         if (TextUtils.isEmpty(selection)) {
//             if (selectionArgs != null && selectionArgs.length > 0) {
//                 throw new IllegalArgumentException(
//                         "Valid selection required when including arguments=");
//             }
// 
//             // Shortcut when clause is empty
//             return this;
//         }
// 
//         if (mSelection.length() > 0) {
//             mSelection.append(" AND ");
//         }
// 
//         mSelection.append("(").append(selection).append(")");
//         if (selectionArgs != null) {
//             for (String arg : selectionArgs) {
//                 mSelectionArgs.add(arg);
//             }
//         }
// 
//         return this;
//     }
// 
//     public SelectionBuilder table(String table) {
//         mTable = table;
//         return this;
//     }
// 
//     private void assertTable() {
//         if (mTable == null) {
//             throw new IllegalStateException("Table not specified");
//         }
//     }
// 
//     public SelectionBuilder mapToTable(String column, String table) {
//         mProjectionMap.put(column, table + "." + column);
//         return this;
//     }
// 
//     public SelectionBuilder map(String fromColumn, String toClause) {
//         mProjectionMap.put(fromColumn, toClause + " AS " + fromColumn);
//         return this;
//     }
// 
//     /**
//      * Return selection string for current internal state.
//      *
//      * @see #getSelectionArgs()
//      */
//     public String getSelection() {
//         return mSelection.toString();
//     }
// 
//     /**
//      * Return selection arguments for current internal state.
//      *
//      * @see #getSelection()
//      */
//     public String[] getSelectionArgs() {
//         return mSelectionArgs.toArray(new String[mSelectionArgs.size()]);
//     }
// 
//     private void mapColumns(String[] columns) {
//         for (int i = 0; i < columns.length; i++) {
//             final String target = mProjectionMap.get(columns[i]);
//             if (target != null) {
//                 columns[i] = target;
//             }
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "SelectionBuilder[table=" + mTable + ", selection=" + getSelection()
//                 + ", selectionArgs=" + Arrays.toString(getSelectionArgs()) + "]";
//     }
// 
//     /**
//      * Execute query using the current internal state as {@code WHERE} clause.
//      */
//     public Cursor query(SQLiteDatabase db, String[] columns, String orderBy) {
//         return query(db, columns, null, null, orderBy, null);
//     }
// 
//     /**
//      * Execute query using the current internal state as {@code WHERE} clause.
//      */
//     public Cursor query(SQLiteDatabase db, String[] columns, String groupBy,
//             String having, String orderBy, String limit) {
//         assertTable();
//         if (columns != null) {
//             mapColumns(columns);
//         }
//         if (LOGV) {
//             Log.v(TAG, "query(columns=" + Arrays.toString(columns) + ") " + this);
//         }
//         return db.query(mTable, columns, getSelection(), getSelectionArgs(), groupBy, having,
//                         orderBy, limit);
//     }
// 
//     /**
//      * Execute update using the current internal state as {@code WHERE} clause.
//      */
//     public int update(SQLiteDatabase db, ContentValues values) {
//         assertTable();
//         if (LOGV) {
//             Log.v(TAG, "update() " + this);
//         }
//         return db.update(mTable, values, getSelection(), getSelectionArgs());
//     }
// 
//     /**
//      * Execute delete using the current internal state as {@code WHERE} clause.
//      */
//     public int delete(SQLiteDatabase db) {
//         assertTable();
//         if (LOGV) {
//             Log.v(TAG, "delete() " + this);
//         }
//         return db.delete(mTable, getSelection(), getSelectionArgs());
//     }
// }


import com.google.android.apps.iosched.util.SelectionBuilder;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import java.util.TimeZone;
                    projection, sortOrder);

            c.setNotificationUri(getContext().getContentResolver(), uri);
            return c;
        }
        return null;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {

        final long updateTimestamp = System.currentTimeMillis();
        values.put(TimestampColumns.UPDATED_ON, updateTimestamp);

        final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        final SelectionBuilder builder = buildSimpleSelection(uri, "");
        final int count = builder.where(selection, selectionArgs).update(db,
                values);

        final int match = URI_MATCHER.match(uri);
        switch (match) {
        case SLEEP_SESSIONS:
        case SLEEP_SESSIONS_ID:
            notifyChange(uri);
        }
        return count;
    }

    private SelectionBuilder buildSimpleSelection(Uri uri, String as) {
// Path: src/com/google/android/apps/iosched/util/SelectionBuilder.java
// public class SelectionBuilder {
//     private static final String TAG = "SelectionBuilder";
//     private static final boolean LOGV = false;
// 
//     private String mTable = null;
//     private Map<String, String> mProjectionMap = Maps.newHashMap();
//     private StringBuilder mSelection = new StringBuilder();
//     private ArrayList<String> mSelectionArgs = Lists.newArrayList();
// 
//     /**
//      * Reset any internal state, allowing this builder to be recycled.
//      */
//     public SelectionBuilder reset() {
//         mTable = null;
//         mSelection.setLength(0);
//         mSelectionArgs.clear();
//         return this;
//     }
// 
//     /**
//      * Append the given selection clause to the internal state. Each clause is
//      * surrounded with parenthesis and combined using {@code AND}.
//      */
//     public SelectionBuilder where(String selection, String... selectionArgs) {
//         if (TextUtils.isEmpty(selection)) {
//             if (selectionArgs != null && selectionArgs.length > 0) {
//                 throw new IllegalArgumentException(
//                         "Valid selection required when including arguments=");
//             }
// 
//             // Shortcut when clause is empty
//             return this;
//         }
// 
//         if (mSelection.length() > 0) {
//             mSelection.append(" AND ");
//         }
// 
//         mSelection.append("(").append(selection).append(")");
//         if (selectionArgs != null) {
//             for (String arg : selectionArgs) {
//                 mSelectionArgs.add(arg);
//             }
//         }
// 
//         return this;
//     }
// 
//     public SelectionBuilder table(String table) {
//         mTable = table;
//         return this;
//     }
// 
//     private void assertTable() {
//         if (mTable == null) {
//             throw new IllegalStateException("Table not specified");
//         }
//     }
// 
//     public SelectionBuilder mapToTable(String column, String table) {
//         mProjectionMap.put(column, table + "." + column);
//         return this;
//     }
// 
//     public SelectionBuilder map(String fromColumn, String toClause) {
//         mProjectionMap.put(fromColumn, toClause + " AS " + fromColumn);
//         return this;
//     }
// 
//     /**
//      * Return selection string for current internal state.
//      *
//      * @see #getSelectionArgs()
//      */
//     public String getSelection() {
//         return mSelection.toString();
//     }
// 
//     /**
//      * Return selection arguments for current internal state.
//      *
//      * @see #getSelection()
//      */
//     public String[] getSelectionArgs() {
//         return mSelectionArgs.toArray(new String[mSelectionArgs.size()]);
//     }
// 
//     private void mapColumns(String[] columns) {
//         for (int i = 0; i < columns.length; i++) {
//             final String target = mProjectionMap.get(columns[i]);
//             if (target != null) {
//                 columns[i] = target;
//             }
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "SelectionBuilder[table=" + mTable + ", selection=" + getSelection()
//                 + ", selectionArgs=" + Arrays.toString(getSelectionArgs()) + "]";
//     }
// 
//     /**
//      * Execute query using the current internal state as {@code WHERE} clause.
//      */
//     public Cursor query(SQLiteDatabase db, String[] columns, String orderBy) {
//         return query(db, columns, null, null, orderBy, null);
//     }
// 
//     /**
//      * Execute query using the current internal state as {@code WHERE} clause.
//      */
//     public Cursor query(SQLiteDatabase db, String[] columns, String groupBy,
//             String having, String orderBy, String limit) {
//         assertTable();
//         if (columns != null) {
//             mapColumns(columns);
//         }
//         if (LOGV) {
//             Log.v(TAG, "query(columns=" + Arrays.toString(columns) + ") " + this);
//         }
//         return db.query(mTable, columns, getSelection(), getSelectionArgs(), groupBy, having,
//                         orderBy, limit);
//     }
// 
//     /**
//      * Execute update using the current internal state as {@code WHERE} clause.
//      */
//     public int update(SQLiteDatabase db, ContentValues values) {
//         assertTable();
//         if (LOGV) {
//             Log.v(TAG, "update() " + this);
//         }
//         return db.update(mTable, values, getSelection(), getSelectionArgs());
//     }
// 
//     /**
//      * Execute delete using the current internal state as {@code WHERE} clause.
//      */
//     public int delete(SQLiteDatabase db) {
//         assertTable();
//         if (LOGV) {
//             Log.v(TAG, "delete() " + this);
//         }
//         return db.delete(mTable, getSelection(), getSelectionArgs());
//     }
// }


// Path: src/com/androsz/electricsleepbeta/db/ElectricSleepProvider.java
import com.google.android.apps.iosched.util.SelectionBuilder;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import java.util.TimeZone;

                    projection, sortOrder);

            c.setNotificationUri(getContext().getContentResolver(), uri);
            return c;
        }
        return null;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {

        final long updateTimestamp = System.currentTimeMillis();
        values.put(TimestampColumns.UPDATED_ON, updateTimestamp);

        final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        final SelectionBuilder builder = buildSimpleSelection(uri, "");
        final int count = builder.where(selection, selectionArgs).update(db,
                values);

        final int match = URI_MATCHER.match(uri);
        switch (match) {
        case SLEEP_SESSIONS:
        case SLEEP_SESSIONS_ID:
            notifyChange(uri);
        }
        return count;
    }

    private SelectionBuilder buildSimpleSelection(Uri uri, String as) {
        final SelectionBuilder builder = new SelectionBuilder();