DeletionBuilder.java

  1. package net.zer0bandwidth.android.lib.database.querybuilder;

  2. import android.database.sqlite.SQLiteDatabase;
  3. import android.util.Log;

  4. import static net.zer0bandwidth.android.lib.database.SQLiteSyntax.DELETE_ALL;
  5. import static net.zer0bandwidth.android.lib.database.SQLiteSyntax.DELETE_FAILED;
  6. import static net.zer0bandwidth.android.lib.database.SQLiteSyntax.SQL_DELETE_FROM;
  7. import static net.zer0bandwidth.android.lib.database.SQLiteSyntax.SQL_WHERE;

  8. /**
  9.  * Builds a SQLite {@code DELETE} query.
  10.  *
  11.  * <h3>Examples</h3>
  12.  *
  13.  * Delete all records from a table:
  14.  *
  15.  * <pre>
  16.  * int nDeleted = QueryBuilder.deleteFrom( sTableName )
  17.  *     .deleteAll()
  18.  *     .executeOn( db )
  19.  *     ;
  20.  * </pre>
  21.  *
  22.  * Delete select records from a table:
  23.  *
  24.  * <pre>
  25.  * int nDeleted = QueryBuilder.deleteFrom( sTableName )
  26.  *     .where( "active=? OR last_active_ts<=?",
  27.  *         QueryBuilder.WHERE_FALSE, TimeUtils.now() - 86400 )
  28.  *     .executeOn( db )
  29.  *     ;
  30.  * </pre>
  31.  *
  32.  * @since zer0bandwidth-net/android 0.1.1 (#20)
  33.  * @see SQLiteDatabase#delete(String, String, String[])
  34.  */
  35. public class DeletionBuilder
  36. extends QueryBuilder<DeletionBuilder,Integer>
  37. {
  38. protected static final String LOG_TAG =
  39. DeletionBuilder.class.getSimpleName() ;

  40. public DeletionBuilder( String sTableName )
  41. { super( sTableName ) ; }

  42. /**
  43.  * Convenience grammar specifying that all rows should be deleted.
  44.  * @return (fluid)
  45.  */
  46. public DeletionBuilder deleteAll()
  47. { return this.where( DELETE_ALL ) ; }

  48. /**
  49.  * Deletes rows based on the builder's {@code WHERE} clause.
  50.  * @param db the database instance on which the query should be executed.
  51.  * @return the number of rows deleted, or
  52.  *  {@link net.zer0bandwidth.android.lib.database.SQLiteSyntax#DELETE_FAILED}
  53.  *  if the operation fails
  54.  */
  55. @Override
  56. public Integer executeOn( SQLiteDatabase db )
  57. {
  58. try
  59. {
  60. return db.delete(
  61. m_sTableName,
  62. this.getWhereFormat(),
  63. this.getWhereParams()
  64. );
  65. }
  66. catch( Exception x )
  67. {
  68. Log.e( LOG_TAG, "Deletion query failed:", x ) ;
  69. return DELETE_FAILED ;
  70. }
  71. }

  72. /**
  73.  * Constructs a raw SQL {@code DELETE} query based on the attributes of the
  74.  * builder instance
  75.  * @return a raw SQLite {@code DELETE} query
  76.  */
  77. @Override
  78. public String toString()
  79. {
  80. StringBuilder sb = new StringBuilder() ;
  81. sb.append( SQL_DELETE_FROM ).append( m_sTableName ) ;
  82. final String sWhere = this.getWhereClause() ;
  83. if( sWhere != null )
  84. sb.append( SQL_WHERE ).append( sWhere ) ;
  85. sb.append( " ;" ) ;
  86. return sb.toString() ;
  87. }
  88. }