def has_asset_key(self, asset_key: AssetKey) -> bool: check.inst_param(asset_key, "asset_key", AssetKey) query = (db.select([ AssetKeyTable.c.asset_key, AssetKeyTable.c.asset_details ]).where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string(legacy=True), )).limit(1)) with self.index_connection() as conn: row = conn.execute(query).fetchone() if not row: return False asset_details: Optional[ AssetDetails] = AssetDetails.from_db_string(row[1]) if not asset_details or not asset_details.last_wipe_timestamp: return True materialization_row = conn.execute( db.select([SqlEventLogStorageTable.c.timestamp]).where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string( legacy=True), )).order_by( SqlEventLogStorageTable.c.timestamp.desc()).limit( 1)).fetchone() if not materialization_row: return False return utc_datetime_from_naive( materialization_row[0]) > utc_datetime_from_timestamp( asset_details.last_wipe_timestamp)
def has_asset_key(self, asset_key: AssetKey) -> bool: check.inst_param(asset_key, "asset_key", AssetKey) if self.has_secondary_index(SECONDARY_INDEX_ASSET_KEY): query = ( db.select([1]) .where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string(legacy=True), ) ) .limit(1) ) else: query = ( db.select([1]) .where( db.or_( SqlEventLogStorageTable.c.asset_key == asset_key.to_string(), SqlEventLogStorageTable.c.asset_key == asset_key.to_string(legacy=True), ) ) .limit(1) ) with self.index_connection() as conn: results = conn.execute(query).fetchall() return len(results) > 0
def has_asset_key(self, asset_key: AssetKey) -> bool: check.inst_param(asset_key, "asset_key", AssetKey) query = (db.select([1]).where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string(legacy=True), )).limit(1)) with self.index_connection() as conn: results = conn.execute(query).fetchall() return len(results) > 0
def has_asset_key(self, asset_key: AssetKey) -> bool: check.inst_param(asset_key, "asset_key", AssetKey) if self.has_secondary_index(ASSET_KEY_INDEX_COLS): query = (db.select([AssetKeyTable.c.asset_key]).where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string( legacy=True), )).where( db.or_( AssetKeyTable.c.wipe_timestamp == None, AssetKeyTable.c.last_materialization_timestamp > AssetKeyTable.c.wipe_timestamp, )).limit(1)) with self.index_connection() as conn: row = conn.execute(query).fetchone() return bool(row) # has not migrated, need to pull asset_details to get wipe status query = (db.select([ AssetKeyTable.c.asset_key, AssetKeyTable.c.asset_details ]).where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string(legacy=True), )).limit(1)) with self.index_connection() as conn: row = conn.execute(query).fetchone() if not row: return False asset_details: Optional[ AssetDetails] = AssetDetails.from_db_string(row[1]) if not asset_details or not asset_details.last_wipe_timestamp: return True materialization_row = conn.execute( db.select([SqlEventLogStorageTable.c.timestamp]).where( db.or_( AssetKeyTable.c.asset_key == asset_key.to_string(), AssetKeyTable.c.asset_key == asset_key.to_string( legacy=True), )).order_by( SqlEventLogStorageTable.c.timestamp.desc()).limit( 1)).fetchone() if not materialization_row: return False return utc_datetime_from_naive( materialization_row[0]) > utc_datetime_from_timestamp( asset_details.last_wipe_timestamp)