Bug description
If I try to execute a very deeply nested creation using prisma, it just runs endlessly.
How to reproduce
Just use attached schema and try to run attached query.
Expected behavior
Query execution should be completed successfully.
Prisma information
Prisma schema:
model Dish {
id ID
name String
calories Float?
proteins Float?
fats Float?
carbohydrates Float?
meals Meal[] @relation(references: [id])
}
model Meal {
id ID
dishes Dish[] @relation(references: [id])
breakfasts DayMenu[] @relation("breakfast")
snacksAfterBreakfast DayMenu[] @relation("snacksAfterBreakfast")
dinners DayMenu[] @relation("dinner")
snacksBeforeSupper DayMenu[] @relation("snackBeforeSupper")
suppers DayMenu[] @relation("supper")
}
model DayMenu {
id ID
breakfast Meal @relation("breakfast", fields: [breakfastId], references: [id])
snackAfterBreakfast Meal @relation("snacksAfterBreakfast", fields: [snackAfterBreakfastId], references: [id])
dinner Meal @relation("dinner", fields: [dinnerId], references: [id])
snackBeforeSupper Meal @relation("snackBeforeSupper", fields: [snackBeforeSupperId], references: [id])
supper Meal @relation("supper", fields: [supperId], references: [id])
breakfastId String
snackAfterBreakfastId String
dinnerId String
snackBeforeSupperId String
supperId String
mondays WeekMenu[] @relation("monday")
tuesdays WeekMenu[] @relation("tuesday")
wednesdays WeekMenu[] @relation("wednesday")
thursdays WeekMenu[] @relation("thursday")
fridays WeekMenu[] @relation("friday")
saturdays WeekMenu[] @relation("saturday")
sundays WeekMenu[] @relation("sunday")
}
model WeekMenu {
id ID
monday DayMenu @relation("monday", fields: [mondayId], references: [id])
tuesday DayMenu @relation("tuesday", fields: [tuesdayId], references: [id])
wednesday DayMenu @relation("wednesday", fields: [wednesdayId], references: [id])
thursday DayMenu @relation("thursday", fields: [thursdayId], references: [id])
friday DayMenu @relation("friday", fields: [fridayId], references: [id])
saturday DayMenu @relation("saturday", fields: [saturdayId], references: [id])
sunday DayMenu @relation("sunday", fields: [sundayId], references: [id])
mondayId String
tuesdayId String
wednesdayId String
thursdayId String
fridayId String
saturdayId String
sundayId String
timelineItems WeekMenuTimelineItem[]
}
model WeekMenuTimelineItem {
id ID
date DateTime
weekMenu WeekMenu @relation(fields: [weekMenuId], references: [id])
weekMenuId String
}
Prisma query:
await db.weekMenuTimelineItem.create({
data: {
date: moment().toDate(),
weekMenu: {
create: {
monday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
tuesday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
wednesday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
thursday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
friday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
saturday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
sunday: {
create: {
breakfast: {create: {dishes: {create: {name: ""}}}},
snackAfterBreakfast: {create: {dishes: {create: {name: ""}}}},
dinner: {create: {dishes: {create: {name: ""}}}},
snackBeforeSupper: {create: {dishes: {create: {name: ""}}}},
supper: {create: {dishes: {create: {name: ""}}}},
}
},
}
}
}
})
}
Prisma logs (DEBUG=*, log: ["info", "query", "warn"]):
express:router dispatching POST / +7s
express:router query : / +1ms
express:router expressInit : / +0ms
express:router corsMiddleware : / +1ms
body-parser:json content-type "application/json" +0ms
body-parser:json content-encoding "identity" +2ms
body-parser:json read body +0ms
body-parser:json parse body +18ms
body-parser:json parse json +0ms
prisma-client Prisma Client call: +7s
prisma-client prisma.weekMenuTimelineItem.create({
prisma-client data: {
prisma-client date: new Date('2020-05-16T17:00:00.000Z'),
prisma-client weekMenu: {
prisma-client create: {
prisma-client monday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client tuesday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client wednesday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client thursday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client friday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client saturday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client sunday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client },
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: {
prisma-client name: ''
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }) +2ms
prisma-client Generated request: +11ms
prisma-client mutation {
prisma-client createOneWeekMenuTimelineItem(data: {
prisma-client date: "2020-05-16T17:00:00.000Z"
prisma-client weekMenu: {
prisma-client create: {
prisma-client monday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client tuesday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client wednesday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client thursday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client friday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client saturday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client sunday: {
prisma-client create: {
prisma-client breakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackAfterBreakfast: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client dinner: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client snackBeforeSupper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client supper: {
prisma-client create: {
prisma-client dishes: {
prisma-client create: [
prisma-client {
prisma-client name: ""
prisma-client }
prisma-client ]
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }
prisma-client }) {
prisma-client id
prisma-client date
prisma-client weekMenuId
prisma-client }
prisma-client }
prisma-client +1ms
engine {
engine PRISMA_DML_PATH: '/Users/victor/Development/projects/healthy-intellect/hi-foodie-api/node_modules/.prisma/client/schema.prisma',
engine PORT: '56652',
engine RUST_BACKTRACE: '1',
engine RUST_LOG: 'info',
engine LOG_QUERIES: 'true',
engine OVERWRITE_DATASOURCES: '[]'
engine } +0ms
engine {
engine cwd: '/Users/victor/Development/projects/healthy-intellect/hi-foodie-api'
engine } +3ms
engine {
engine dotPrismaPath: '/Users/victor/Development/projects/healthy-intellect/hi-foodie-api/node_modules/.prisma/client/query-engine-darwin'
engine } +1ms
plusX Execution permissions of /Users/victor/Development/projects/healthy-intellect/hi-foodie-api/node_modules/.prisma/client/query-engine-darwin are fine +0ms
engine { flags: [ '--enable-raw-queries' ] } +13ms
engine stderr Printing to stderr for debugging +102ms
engine stderr Listening on 127.0.0.1:56652 +1ms
engine stdout {
timestamp: 'May 12 12:23:03.687',
level: 'INFO',
target: 'quaint::pooled',
fields: { message: 'Starting a postgresql pool with 9 connections.' }
} +3ms
prisma:info Starting a postgresql pool with 9 connections.
engine stdout {
timestamp: 'May 12 12:23:03.696',
level: 'INFO',
target: 'query_engine::server',
fields: { message: 'Started http server on 127.0.0.1:56652' }
} +8ms
prisma:info Started http server on 127.0.0.1:56652
engine stdout {
timestamp: 'May 12 12:23:03.719',
level: 'INFO',
target: 'quaint::connector::metrics',
fields: { query: 'BEGIN', item_type: 'query', params: '[]', duration_ms: 0 }
} +23ms
prisma:query BEGIN
Environment & setup
- OS: Mac OS
- Database: PostgreSQL
- Prisma version: 2.0.0-beta.4
- Node.js version: v13.2.0
Bug description
If I try to execute a very deeply nested creation using prisma, it just runs endlessly.
How to reproduce
Just use attached schema and try to run attached query.
Expected behavior
Query execution should be completed successfully.
Prisma information
Prisma schema:
Prisma query:
Prisma logs (DEBUG=*, log: ["info", "query", "warn"]):
Environment & setup