@@ -181,9 +181,11 @@ class BookkeeperJdbc(db: Database, profile: JdbcProfile, batchId: Long) extends
181181 val hasWildcard = tableName.contains(" *" )
182182
183183 val escape = '\\ '
184+ val tableNameTrimmed = tableName.trim
184185 val baseEscaped = tableName.trim
185186 .replace(" \\ " , " \\\\ " )
186187 .replace(" %" , " \\ %" )
188+ .replace(" _" , " \\ _" )
187189
188190 val tableNameEscaped = if (hasWildcard) baseEscaped.replace(" *" , " %" ) else baseEscaped
189191
@@ -195,10 +197,10 @@ class BookkeeperJdbc(db: Database, profile: JdbcProfile, batchId: Long) extends
195197 val patternForLogging = if (hasWildcard)
196198 s " ' $likePattern' "
197199 else
198- s " ' $tableNameEscaped ' or ' $likePattern' "
200+ s " ' $tableNameTrimmed ' or ' $likePattern' "
199201
200202 val listQuery = BookkeepingRecords .records
201- .filter(r => r.pramenTableName === tableNameEscaped || r.pramenTableName.like(likePattern, escape))
203+ .filter(r => r.pramenTableName === tableNameTrimmed || r.pramenTableName.like(likePattern, escape))
202204 .map(_.pramenTableName)
203205 .distinct
204206
@@ -208,34 +210,34 @@ class BookkeeperJdbc(db: Database, profile: JdbcProfile, batchId: Long) extends
208210 throw new IllegalArgumentException (s " The table wildcard ' $tableName' matches more than 100 tables ( ${tablesToDelete.length}). To avoid accidental deletions, please refine the wildcard. " )
209211
210212 val deletionQuery = BookkeepingRecords .records
211- .filter(r => r.pramenTableName === tableNameEscaped || r.pramenTableName.like(likePattern))
213+ .filter(r => r.pramenTableName === tableNameTrimmed || r.pramenTableName.like(likePattern))
212214 .delete
213215
214216 try {
215217 val deletedBkCount = SlickUtils .executeAction(db, deletionQuery)
216218 log.info(s " Deleted $deletedBkCount records from the bookkeeping table for tables matching $patternForLogging: ${tablesToDelete.mkString(" , " )}" )
217219
218220 val deletedSchemaCount = SlickUtils .executeAction(db, SchemaRecords .records
219- .filter(r => r.pramenTableName === tableNameEscaped || r.pramenTableName.like(likePattern, escape))
221+ .filter(r => r.pramenTableName === tableNameTrimmed || r.pramenTableName.like(likePattern, escape))
220222 .delete
221223 )
222224 log.info(s " Deleted $deletedSchemaCount records from the schemas table. " )
223225
224226 val deletedOffsetsCount = SlickUtils .executeAction(db, OffsetRecords .records
225- .filter(r => r.pramenTableName === tableNameEscaped || r.pramenTableName.like(likePattern, escape))
227+ .filter(r => r.pramenTableName === tableNameTrimmed || r.pramenTableName.like(likePattern, escape))
226228 .delete
227229 )
228230 log.info(s " Deleted $deletedOffsetsCount records from the offsets table. " )
229231
230232 val deletedMetadataCount = SlickUtils .executeAction(db, MetadataRecords .records
231- .filter(r => r.pramenTableName === tableNameEscaped || r.pramenTableName.like(likePattern, escape))
233+ .filter(r => r.pramenTableName === tableNameTrimmed || r.pramenTableName.like(likePattern, escape))
232234 .delete
233235 )
234236 log.info(s " Deleted $deletedMetadataCount records from the metadata table. " )
235237
236238 tablesToDelete
237239 } catch {
238- case NonFatal (ex) => throw new RuntimeException (s " Unable to delete records from the bookkeeping table for tables matching ' $likePattern '. " , ex)
240+ case NonFatal (ex) => throw new RuntimeException (s " Unable to delete records from the bookkeeping table for tables matching ' $patternForLogging '. " , ex)
239241 }
240242 }
241243
0 commit comments