[epgd] nach Update auf mariadb 10.2.15 -> Felddefinitionen werden bei *jedem* Start angemault

  • Hi *,


    nach Update auf die openSUSE Leap 15.0 und damit auf mariadb 10.2.15 werden alle (?) Felddefinitionen bei *jedem* Start angemault:

    Code
    1. Sep 01 15:04:29 boston epgd[22516]: Checking table structure and indices ...
    2. Sep 01 15:04:29 boston epgd[22516]: Checking table 'analyse'
    3. Sep 01 15:04:29 boston epgd[22516]: Info: Definition of field 'analyse.VDRMASTERID' modified, try to alter table
    4. Sep 01 15:04:29 boston epgd[22516]: Execute [alter table analyse modify column vdr_masterid INT(11) unsigned comment '' ]
    5. Sep 01 15:04:29 boston epgd[22516]: Info: Definition of field 'analyse.VDRSTARTTIME' modified, try to alter table
    6. Sep 01 15:04:29 boston epgd[22516]: Execute [alter table analyse modify column vdr_starttime INT(10) comment '' ]


    Es kommen keine Fehler ansonsten und danach scheint epgd auch zu laufen, aber beim nächsten Start geht dasselbe Spiel wieder los.

    Auch beim Starten von epghttpd passiert dasselbe.


    Ist das eine Inkompatibilät zu dieser MariaDB Version oder hab ich was übersehen?


    Danke und ciao.

    Michael.

  • Ich hab mal ein wenig "printf debugging" eingebaut:


    Code
    1. Sep 02 11:14:47 boston epghttpd[26881]: before alterModifyField: vdrs.VIDEOFREE
    2. Sep 02 11:14:47 boston epghttpd[26881]: colDef >NULL<-><
    3. Sep 02 11:14:47 boston epghttpd[26881]: Type >1< Primary >2<
    4. Sep 02 11:14:47 boston epghttpd[26881]: Info: Definition of field 'vdrs.VIDEOFREE' modified, try to alter table
    5. Sep 02 11:14:47 boston epghttpd[26881]: Execute [alter table vdrs modify column videofree INT(11) unsigned comment '' ]

    Sieht aus, als läge es an der Zeile 953 in lib/db.c:

    Code
    1. ( strcasecmp(fieldInfo->def.c_str(), getField(i)->getDefault()) != 0 && !(getField(i)->getType() & ftPrimary))


    Wobei ich mangels Ahnung von mariadb nicht weiß, was da auf einmal anders als vorher ist.

    Kann es sein, dass NULL unerwartet ist für fieldInfo->def.c_str()?


    Ciao.

    Michael.

  • Ok, da kommt tatsächlich der String "NULL" zurück.

    Ich hab mal Zeile 927in lib/db.c geändert auf:


    Code
    1. fields[row[0]].def = (row[6] && strcmp(row[6], "NULL") != 0) ? row[6] : "";


    Jetzt kommen nur noch zwei Meldungen:

    Code
    1. Sep 02 13:40:27 boston epghttpd[19574]: before alterModifyField: timers.STATE
    2. Sep 02 13:40:27 boston epghttpd[19574]: colDef >'u'<->u<
    3. Sep 02 13:40:27 boston epghttpd[19574]: Type & Primary >0<
    4. Sep 02 13:40:27 boston epghttpd[19574]: Info: Definition of field 'timers.STATE' modified, try to alter table
    5. Sep 02 13:40:27 boston epghttpd[19574]: Execute [alter table timers modify column state VARCHAR(1) comment '\'D\'eleted, \'R\'unning, \'F\'inished' default 'u']
    6. Sep 02 13:40:27 boston epghttpd[19574]: before alterModifyField: timers.ACTION
    7. Sep 02 13:40:27 boston epghttpd[19574]: colDef >'a'<->a<
    8. Sep 02 13:40:27 boston epghttpd[19574]: Type & Primary >0<
    9. Sep 02 13:40:27 boston epghttpd[19574]: Info: Definition of field 'timers.ACTION' modified, try to alter table
    10. Sep 02 13:40:27 boston epghttpd[19574]: Execute [alter table timers modify column action VARCHAR(1) comment '' default 'a']


    Und da stehen als Defaultwerte in der Datenbank wirklich 'a' und 'u' inkl. der Hochkommata.


    Soll das so?

  • mit 10.1.34-MariaDB-0ubuntu0.18.04.1 habe ich den Effekt noch nicht.

    Mit dem String 'NULL' haben die m.E. aber was merkwürdiges "geschraubt" :o


    /Edit:

    Das mit den Defaults sollte bei "show create table timers" z.B. so aussehen:

    `action` varchar(1) DEFAULT 'a',


    Ansonsten mal zum Test die ' hier weglassen:

    Code
    1. asprintf(&statement, "alter table %s modify column %s %s comment '%s' %s%s%s",
    2. TableName(),
    3. def->getDbName(),
    4. def->toColumnFormat(colType),
    5. def->getDbDescription(),
    6. !isEmpty(def->getDefault()) ? "default '" : "",
    7. !isEmpty(def->getDefault()) ? def->getDefault() : "",
    8. !isEmpty(def->getDefault()) ? "'" : ""
  • Versuche ich mal, wenn ich wieder vom Urlaub daheim bin - danke für den Hinweis.