Skip to content

COALESCE returning the incorrect type #780

Closed
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions