[WARN] Table repository Column <table> default is NULL, struct default is #4264

Closed
opened 2025-11-02 05:44:14 -06:00 by GiteaMirror · 3 comments
Owner

Originally created by @samangh on GitHub (Nov 7, 2019).

  • Gitea version (or commit ref): 1.9.5 built with GNU Make 4.1, go1.12.11 : bindata, sqlite, sqlite_unlock_notify
  • Operating system: Debian Stable
  • Database (use [x]):
    • PostgreSQL
    • MySQL
    • MSSQL
    • SQLite
  • Can you reproduce the bug at https://try.gitea.io:
    • Yes (provide example URL)
    • No
    • Not relevant

Description

Upon starting gitea, I get a large number of Table repository Column <table> default is NULL, struct default is errors.

This maybe related #3265.

Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column full_name db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column keep_email_private db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column must_change_password db default is 0, struct default is false
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column login_type db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column login_name db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column type db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column location db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column website db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column rands db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column salt db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column language db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column description db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column created_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column updated_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column last_login_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column last_repo_visibility db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column is_active db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column is_admin db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column allow_git_hook db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column allow_import_local db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column allow_create_organization db default is 1, struct default is true
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column prohibit_login db default is 0, struct default is false
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column use_custom_avatar db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column num_followers db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column num_stars db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column num_repos db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column num_teams db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column num_members db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column diff_view_style db default is '''', struct default is ''
Nov  6 14:34:20 server gitea[21171]: [WARN] Table user Column theme db default is '''', struct default is ''
Nov  6 14:34:20 server gitea[21171]: [WARN] Table public_key Column created_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table public_key Column updated_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column uid db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column name db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column token_hash db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column token_salt db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column token_last_eight db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column created_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table access_token Column updated_unix db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table repository Column owner_id db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table repository Column description db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table repository Column website db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table repository Column default_branch db default is 'NULL', struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table repository Column num_watches db default is NULL, struct default is
Nov  6 14:34:20 server gitea[21171]: [WARN] Table repository Column num_stars db default is NULL, struct default is
Originally created by @samangh on GitHub (Nov 7, 2019). - Gitea version (or commit ref): 1.9.5 built with GNU Make 4.1, go1.12.11 : bindata, sqlite, sqlite_unlock_notify - Operating system: Debian Stable - Database (use `[x]`): - [ ] PostgreSQL - [x] MySQL - [ ] MSSQL - [ ] SQLite - Can you reproduce the bug at https://try.gitea.io: - [ ] Yes (provide example URL) - [ ] No - [x] Not relevant ## Description Upon starting gitea, I get a large number of `Table repository Column <table> default is NULL, struct default is` errors. This maybe related #3265. ``` Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column full_name db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column keep_email_private db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column must_change_password db default is 0, struct default is false Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column login_type db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column login_name db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column type db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column location db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column website db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column rands db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column salt db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column language db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column description db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column created_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column updated_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column last_login_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column last_repo_visibility db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column is_active db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column is_admin db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column allow_git_hook db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column allow_import_local db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column allow_create_organization db default is 1, struct default is true Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column prohibit_login db default is 0, struct default is false Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column use_custom_avatar db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column num_followers db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column num_stars db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column num_repos db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column num_teams db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column num_members db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column diff_view_style db default is '''', struct default is '' Nov 6 14:34:20 server gitea[21171]: [WARN] Table user Column theme db default is '''', struct default is '' Nov 6 14:34:20 server gitea[21171]: [WARN] Table public_key Column created_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table public_key Column updated_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column uid db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column name db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column token_hash db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column token_salt db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column token_last_eight db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column created_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table access_token Column updated_unix db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table repository Column owner_id db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table repository Column description db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table repository Column website db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table repository Column default_branch db default is 'NULL', struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table repository Column num_watches db default is NULL, struct default is Nov 6 14:34:20 server gitea[21171]: [WARN] Table repository Column num_stars db default is NULL, struct default is ```
GiteaMirror added the status/blockedtype/upstream labels 2025-11-02 05:44:14 -06:00
Author
Owner

@lunny commented on GitHub (Nov 7, 2019):

This maybe an issue of xorm.

@lunny commented on GitHub (Nov 7, 2019): This maybe an issue of xorm.
Author
Owner

@ltguillaume commented on GitHub (Apr 17, 2020):

Is there anything I should do about this manually?

@ltguillaume commented on GitHub (Apr 17, 2020): Is there anything I should do about this manually?
Author
Owner

@zeripath commented on GitHub (Aug 29, 2020):

OK at least part of this is a bug of xorm.

The issue is: xorm.io/xorm/session_schema.go:228

func (session *Session) Sync2(beans ...interface{}) error {...}

Calls: xorm.io/xorm/dialects/mysql.go:517

func (db *mysql) CreateTableSQL(table *schemas.Table, tableName string) ([]string, bool) {...}

Which calls xorm.io/xorm/dialects/dialect.go:227

func ColumnString(dialect Dialect, col *schemas.Column, includePrimaryKey bool) (string, error) {...}

which at: xorm.io/xorm/dialects/dialect.go:261

	if col.Default != "" {
		if _, err := bd.WriteString("DEFAULT "); err != nil {
			return "", err
		}
		if _, err := bd.WriteString(col.Default); err != nil {
			return "", err
		}
		if err := bd.WriteByte(' '); err != nil {
			return "", err
		}
	}

skips out the Default if it's empty.

However this conflicts with later parts of Sync2, in particular: xorm.io/xorm/session_schema.go:353

			if col.Default != oriCol.Default {
				switch {
				case col.IsAutoIncrement: // For autoincrement column, don't check default
				case (col.SQLType.Name == schemas.Bool || col.SQLType.Name == schemas.Boolean) &&
					((strings.EqualFold(col.Default, "true") && oriCol.Default == "1") ||
						(strings.EqualFold(col.Default, "false") && oriCol.Default == "0")):
				default:
					engine.logger.Warnf("Table %s Column %s db default is %s, struct default is %s",
						tbName, col.Name, oriCol.Default, col.Default)
				}
			}

Where oriCol.Default is read in as "NULL" if has not been specified, at: xorm.io/xorm/dialects/mysql.go:308

func (db *mysql) GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error) {
	args := []interface{}{db.uri.DBName, tableName}
	s := "SELECT `COLUMN_NAME`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `COLUMN_TYPE`," +
		" `COLUMN_KEY`, `EXTRA`,`COLUMN_COMMENT` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?" +
		" ORDER BY `INFORMATION_SCHEMA`.`COLUMNS`.ORDINAL_POSITION"

	rows, err := queryer.QueryContext(ctx, s, args...)
	if err != nil {
		return nil, nil, err
	}
	defer rows.Close()

	cols := make(map[string]*schemas.Column)
	colSeq := make([]string, 0)
	for rows.Next() {
		col := new(schemas.Column)
		col.Indexes = make(map[string]int)

		var columnName, isNullable, colType, colKey, extra, comment string
		var colDefault *string
		err = rows.Scan(&columnName, &isNullable, &colDefault, &colType, &colKey, &extra, &comment)
		if err != nil {
			return nil, nil, err
		}
		col.Name = strings.Trim(columnName, "` ")
		col.Comment = comment
		if "YES" == isNullable {
			col.Nullable = true
		}

		if colDefault != nil {
			col.Default = *colDefault
			col.DefaultIsEmpty = false
		} else {
			col.DefaultIsEmpty = true
		}
...
@zeripath commented on GitHub (Aug 29, 2020): OK at least part of this is a bug of xorm. The issue is: `xorm.io/xorm/session_schema.go:228` ```go func (session *Session) Sync2(beans ...interface{}) error {...} ``` Calls: `xorm.io/xorm/dialects/mysql.go:517` ```go func (db *mysql) CreateTableSQL(table *schemas.Table, tableName string) ([]string, bool) {...} ``` Which calls `xorm.io/xorm/dialects/dialect.go:227` ```go func ColumnString(dialect Dialect, col *schemas.Column, includePrimaryKey bool) (string, error) {...} ``` which at: `xorm.io/xorm/dialects/dialect.go:261` ```go if col.Default != "" { if _, err := bd.WriteString("DEFAULT "); err != nil { return "", err } if _, err := bd.WriteString(col.Default); err != nil { return "", err } if err := bd.WriteByte(' '); err != nil { return "", err } } ``` skips out the Default if it's empty. However this conflicts with later parts of Sync2, in particular: `xorm.io/xorm/session_schema.go:353` ```go if col.Default != oriCol.Default { switch { case col.IsAutoIncrement: // For autoincrement column, don't check default case (col.SQLType.Name == schemas.Bool || col.SQLType.Name == schemas.Boolean) && ((strings.EqualFold(col.Default, "true") && oriCol.Default == "1") || (strings.EqualFold(col.Default, "false") && oriCol.Default == "0")): default: engine.logger.Warnf("Table %s Column %s db default is %s, struct default is %s", tbName, col.Name, oriCol.Default, col.Default) } } ``` Where `oriCol.Default` is read in as `"NULL"` if has not been specified, at: `xorm.io/xorm/dialects/mysql.go:308` ```go func (db *mysql) GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error) { args := []interface{}{db.uri.DBName, tableName} s := "SELECT `COLUMN_NAME`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `COLUMN_TYPE`," + " `COLUMN_KEY`, `EXTRA`,`COLUMN_COMMENT` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?" + " ORDER BY `INFORMATION_SCHEMA`.`COLUMNS`.ORDINAL_POSITION" rows, err := queryer.QueryContext(ctx, s, args...) if err != nil { return nil, nil, err } defer rows.Close() cols := make(map[string]*schemas.Column) colSeq := make([]string, 0) for rows.Next() { col := new(schemas.Column) col.Indexes = make(map[string]int) var columnName, isNullable, colType, colKey, extra, comment string var colDefault *string err = rows.Scan(&columnName, &isNullable, &colDefault, &colType, &colKey, &extra, &comment) if err != nil { return nil, nil, err } col.Name = strings.Trim(columnName, "` ") col.Comment = comment if "YES" == isNullable { col.Nullable = true } if colDefault != nil { col.Default = *colDefault col.DefaultIsEmpty = false } else { col.DefaultIsEmpty = true } ... ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/gitea#4264