Rudimentary tree support for Genres on SQLite
This commit is contained in:
@@ -1,17 +1,32 @@
|
|||||||
const cds = require('@sap/cds')
|
const cds = require('@sap/cds/lib')
|
||||||
cds.on('served', () => {
|
if (cds.requires.db.kind === 'sqlite') {
|
||||||
// register a simplified handler for tree table
|
|
||||||
// no filtering/searching/collapsing/expanding of nodes
|
// Add a column to the Genres table, to efficiently determine if a node
|
||||||
if (cds.db.kind === 'sqlite') {
|
// is a leaf, and use it for DrillState in hierarchy queries.
|
||||||
const { AdminService } = cds.services
|
cds.on('loaded', m => Object.assign (
|
||||||
AdminService.prepend(() => {
|
m.definitions['sap.capire.bookshop.Genres'].elements,
|
||||||
AdminService.on('READ', 'Genres', (req,next) => {
|
cds.parse (`entity Genres {
|
||||||
const { SELECT } = req.query
|
DrillState: String = coalesce(leaf,'collapsed');
|
||||||
// Suppress error message: Feature "recurse" queries not supported.
|
leaf: String;
|
||||||
delete SELECT.__proto__.recurse
|
}`).definitions.Genres.elements
|
||||||
delete SELECT.recurse
|
))
|
||||||
return next()
|
|
||||||
})
|
// Fill in `leaf` helper column for initial data entries
|
||||||
})
|
cds.on('served', ()=> cds.run(`
|
||||||
}
|
UPDATE sap_capire_bookshop_Genres as g SET leaf='leaf' WHERE not exists (
|
||||||
})
|
SELECT 1 from sap_capire_bookshop_Genres WHERE parent_ID = g.ID
|
||||||
|
)`
|
||||||
|
))
|
||||||
|
|
||||||
|
// Register a simplistic handler for hierarchical queries
|
||||||
|
cds.on('serving:AdminService', srv => srv.prepend(() => srv.on('READ', 'Genres', (req,next) => {
|
||||||
|
const q = req.query, parent = {ref:['parent','ID']}
|
||||||
|
if (q.SELECT.recurse?.where?.[0].ref[0] === 'Distance') q.SELECT.where[0] = parent
|
||||||
|
else if (!q.SELECT.search) q.SELECT.where ??= [ parent, 'is null' ]
|
||||||
|
// Suppress error message: Feature "recurse" queries not supported.
|
||||||
|
delete q.SELECT.__proto__.recurse
|
||||||
|
delete q.SELECT.recurse
|
||||||
|
return next()
|
||||||
|
})))
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user