コード例 #1
0
  @Override
  public synchronized void onUpgrade(
      @NonNull SQLiteDatabase db,
      int oldVersion,
      int newVersion,
      @NonNull TableDefaultsCustomizer customizer) {
    super.onUpgrade(db, oldVersion, newVersion, customizer);

    if (oldVersion <= 6) { // Fix the database to replace absolute paths with relative ones
      Cursor tripsCursor = null;
      try {
        tripsCursor =
            db.query(
                TripsTable.TABLE_NAME,
                new String[] {TripsTable.COLUMN_NAME},
                null,
                null,
                null,
                null,
                null);
        if (tripsCursor != null && tripsCursor.moveToFirst()) {
          final int nameIndex = tripsCursor.getColumnIndex(TripsTable.COLUMN_NAME);
          do {
            String absPath = tripsCursor.getString(nameIndex);
            if (absPath.endsWith(File.separator)) {
              absPath = absPath.substring(0, absPath.length() - 1);
            }

            final String relPath =
                absPath.substring(absPath.lastIndexOf(File.separatorChar) + 1, absPath.length());
            Logger.debug("Updating Abs. Trip Path: {} => {}", absPath, relPath);

            final ContentValues tripValues = new ContentValues(1);
            tripValues.put(TripsTable.COLUMN_NAME, relPath);
            if (db.update(
                    TripsTable.TABLE_NAME,
                    tripValues,
                    TripsTable.COLUMN_NAME + " = ?",
                    new String[] {absPath})
                == 0) {
              Logger.error(this, "Trip Update Error Occured");
            }
          } while (tripsCursor.moveToNext());
        }
      } finally {
        if (tripsCursor != null) {
          tripsCursor.close();
        }
      }
    }

    if (oldVersion <= 8) { // Added a timezone column to the trips table
      final String alterTrips1 =
          "ALTER TABLE "
              + TripsTable.TABLE_NAME
              + " ADD "
              + TripsTable.COLUMN_FROM_TIMEZONE
              + " TEXT";
      final String alterTrips2 =
          "ALTER TABLE "
              + TripsTable.TABLE_NAME
              + " ADD "
              + TripsTable.COLUMN_TO_TIMEZONE
              + " TEXT";

      Logger.debug(this, alterTrips1);
      Logger.debug(this, alterTrips2);

      db.execSQL(alterTrips1);
      db.execSQL(alterTrips2);
    }

    if (oldVersion <= 10) {
      final String alterTrips1 =
          "ALTER TABLE " + TripsTable.TABLE_NAME + " ADD " + TripsTable.COLUMN_COMMENT + " TEXT";
      final String alterTrips2 =
          "ALTER TABLE "
              + TripsTable.TABLE_NAME
              + " ADD "
              + TripsTable.COLUMN_DEFAULT_CURRENCY
              + " TEXT";

      Logger.debug(this, alterTrips1);
      Logger.debug(this, alterTrips2);

      db.execSQL(alterTrips1);
      db.execSQL(alterTrips2);
    }

    if (oldVersion <= 11) { // Added trips filters, payment methods, and mileage table
      final String alterTrips =
          "ALTER TABLE " + TripsTable.TABLE_NAME + " ADD " + TripsTable.COLUMN_FILTERS + " TEXT";

      Logger.debug(this, alterTrips);

      db.execSQL(alterTrips);
    }

    if (oldVersion
        <= 12) { // Added better distance tracking, cost center to the trips, and status to
                 // trips/receipts
      final String alterTripsWithCostCenter =
          "ALTER TABLE "
              + TripsTable.TABLE_NAME
              + " ADD "
              + TripsTable.COLUMN_COST_CENTER
              + " TEXT";
      final String alterTripsWithProcessingStatus =
          "ALTER TABLE "
              + TripsTable.TABLE_NAME
              + " ADD "
              + TripsTable.COLUMN_PROCESSING_STATUS
              + " TEXT";

      Logger.debug(this, alterTripsWithCostCenter);
      Logger.debug(this, alterTripsWithProcessingStatus);

      db.execSQL(alterTripsWithCostCenter);
      db.execSQL(alterTripsWithProcessingStatus);
    }

    if (oldVersion <= 14) {
      onUpgradeToAddSyncInformation(db, oldVersion, newVersion);
    }
  }