Skip to content

COALESCE returning the incorrect type #780

@Victugord

Description

@Victugord

Input:

SELECT t.id          taskID,
       t.created_at  created_at,
       t.updated_at  updated_at,
       t.amount      amount,
       u.id          creatorID,
       u.name        creatorName,

       c.id          clientID,
       c.name        clientName,
       p.id projectId,
       p.name projectName,
       COALESCE(
               NULLIF(p.id, 0), 0
           )  projectID,
       COALESCE(
               NULLIF(p.name, null), 'N/A'
           )  projectName
FROM tasks as t
         FULL OUTER JOIN projects as p on t.project_id = p.id AND COALESCE(p.id, 0) = p.id
         FULL OUTER JOIN users as u on t.user_id = u.id
         FULL OUTER JOIN users as c on t.client_id = c.id
where t.user_id = $1;

output:

SELECT t.id          taskID,
       t.created_at  created_at,
       t.updated_at  updated_at,
       t.amount      amount,
       u.id          creatorID,
       u.name        creatorName,

       c.id          clientID,
       c.name        clientName,
       COALESCE(
               NULLIF(p.id, 0), 0
           )  projectID,
       COALESCE(
               NULLIF(p.name, null), 'N/A'
           )  projectName
FROM tasks as t
         FULL OUTER JOIN projects as p on t.project_id = p.id AND COALESCE(p.id, 0) = p.id
         FULL OUTER JOIN users as u on t.user_id = u.id
         FULL OUTER JOIN users as c on t.client_id = c.id


type AdminGetTasksRow struct {
	Taskid      int32       `json:"taskid"`
	CreatedAt   time.Time   `json:"created_at"`
	UpdatedAt   time.Time   `json:"updated_at"`
	Amount      string      `json:"amount"`
	Creatorid   int32       `json:"creatorid"`
	Creatorname string      `json:"creatorname"`
	Clientid    int32       `json:"clientid"`
	Clientname  string      `json:"clientname"`
	Coalesce    interface{} `json:"coalesce"`
	Coalesce_2  interface{} `json:"coalesce_2"`
}

func (q *Queries) AdminGetTasks(ctx context.Context) ([]AdminGetTasksRow, error) {
	rows, err := q.query(ctx, q.adminGetTasksStmt, adminGetTasks)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []AdminGetTasksRow
	for rows.Next() {
		var i AdminGetTasksRow
		if err := rows.Scan(
			&i.Taskid,
			&i.CreatedAt,
			&i.UpdatedAt,
			&i.Amount,
			&i.Creatorid,
			&i.Creatorname,
			&i.Clientid,
			&i.Clientname,
			&i.Coalesce,
			&i.Coalesce_2,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Close(); err != nil {
		return nil, err
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

The alias is not being respected

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions