NodeInfoDao
Functions
Backfills longName and shortName columns from the user protobuf for nodes where these columns are NULL. This ensures search functionality works for all nodes. Skips placeholder/default users (hwModel == UNSET).
Atomically deletes one node and its separately stored device metadata.
Atomically deletes nodes and their metadata, chunking both IN queries below SQLite's bind-parameter limit. Every chunk participates in the same transaction, so cancellation or a query failure rolls back the whole batch.
Snapshot used by DatabaseMerger to carry per-node DeviceMetadata across transports (newest timestamp wins).
Installs the config download from the connected device, reconciling any node-number change of the device itself (firmware 2.8 renumber, erase-and-reflash, manual re-key) before the new my_node row lands.
One-shot snapshot of every node row in the CURRENTLY SELECTED database (not the process-wide stateIn cache). Used by session-safe cache loads (see NodeManagerImpl.loadCachedNodeDB) so a transport switch can't deliver a stale pre-switch map.
Contact keys are "$channel$userId", so a suffix match rewrites just the DM threads of one node.
Re-scopes stored messages from one owning node number to another (see Packet.myNodeNum).
OR IGNORE: myNodeNum is part of the reactions PK; drop the rare duplicate instead of aborting.
Sets a single power-channel label (0-based channelIndex) atomically: the read-modify-write runs inside a transaction that reads the current labels from the DB, so concurrent edits to different channels can't clobber each other via a stale read. Earlier channels keep their slot (blank padding); trailing blanks are dropped.