drizzle-orm icon indicating copy to clipboard operation
drizzle-orm copied to clipboard

[BUG]: value.map is not a function in InArray for a pgEnum array column.

Open codezuma opened this issue 1 year ago • 1 comments

What version of drizzle-orm are you using?

^0.29.4

What version of drizzle-kit are you using?

^0.19.11

Describe the Bug

Schema

 export const AmmenitiesEnum = pgEnum("ammenities", [
  "Shopping centres/malls",
  "Health care facilities",
  "Schools and colleges/universities",
  "Parks and Gardens",
  "Public Trasnport facilty",
  "Fuel Station",
  "Other Recreational facilities",
]);

export const properties = pgTable("properties", {
  id: serial("id").primaryKey(),
  amenities: AmmenitiesEnum("ammenites").array(),
});

I am trying to query the properties by InArray function of drizzle to get desired out this is my query code

 const desiredAmenities :any[] = ["Shopping centres/malls", "Parks and Gardens"]; 
      conditions.push(inArray(properties.amenities, desiredAmenities));

I am recieving an error

TypeError: value.map is not a function
    at PgArray.mapToDriverValue (D:\code\kraftbase\myProperty-backend\node_modules\src\pg-core\columns\common.ts:202:19)      
    at D:\code\kraftbase\myProperty-backend\node_modules\src\sql\sql.ts:201:71
    at Array.map (<anonymous>)
    at SQL.buildQueryFromSourceParams (D:\code\kraftbase\myProperty-backend\node_modules\src\sql\sql.ts:142:30)
    at D:\code\kraftbase\myProperty-backend\node_modules\src\sql\sql.ts:164:17
    at Array.map (<anonymous>)
    at SQL.buildQueryFromSourceParams (D:\code\kraftbase\myProperty-backend\node_modules\src\sql\sql.ts:142:30)
    at D:\code\kraftbase\myProperty-backend\node_modules\src\sql\sql.ts:168:17
    at Array.map (<anonymous>)
    at SQL.buildQueryFromSourceParams (D:\code\kraftbase\myProperty-backend\node_modules\src\sql\sql.ts:142:30)

Expected behavior

Should return the filtered properties

Environment & setup

No response

codezuma avatar Feb 26 '24 16:02 codezuma

Cannot reproduce this bug. The mapping above works like a charm in Drizzle v0.32.1. Most likely, while updating amenities, you’re directly passing the wrong format. You should pass it in array format.

mtunyk avatar Jul 31 '24 14:07 mtunyk

properties.amenities is an array field. inArray is meant to compare a scalar value to a list/array. You can use arrayContains or arrayContained instead.

L-Mario564 avatar Oct 18 '24 16:10 L-Mario564

@codezuma how did you fix this?

Pezhvak avatar Nov 14 '24 09:11 Pezhvak