mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-10-03 07:55:22 -04:00
The C++ loader reads back only the rows where Value differs from DefaultValue and takes compiled-in defaults for the rest, so the two columns have to be written in the same form. Both writers passed Value through a boolean conversion and DefaultValue through none: a boolean left alone was stored as Value '1' against DefaultValue 'yes', never compared equal, and was read back on every start. The filter did nothing for the 77 boolean rows. Both columns now go through ConfigData::dbValue. It lives there because the two writers - saveConfigToDB for an existing install and zmconfgen for the zm_create.sql of a fresh one - have to agree, and drifting apart is what caused this. An option with no default is stored as its type's empty value, matching the empty string initialiseConfig already gives it. The generated zm_create.sql now has Value equal to DefaultValue for all 259 rows, so a fresh install reads no Config rows at all. The generated zm_config_defines.h is byte identical, confirming the compiled-in defaults are unaffected by the representation change. tests/perl/test_config_default_value.pl checks the invariant over every option in ConfigData; it needs no database, since ConfigData does not. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015Y6FieTwEXuLhhR4e2yiax