u
This commit is contained in:
@@ -93,20 +93,32 @@ FROM posterminalcategory
|
||||
WHERE posterminal_id = @posterminalId
|
||||
`;
|
||||
|
||||
/** setOn: insert if not exists (single terminal + single category). */
|
||||
/** setOn: enable a category and all its subcategories on a terminal. */
|
||||
export const SET_ON = `
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM posterminalcategory
|
||||
WHERE posterminal_id = @posterminalId AND category_id = @categoryId
|
||||
;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT INTO posterminalcategory (posterminal_id, category_id)
|
||||
VALUES (@posterminalId, @categoryId)
|
||||
SELECT @posterminalId, cats.id
|
||||
FROM cats
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM posterminalcategory pc
|
||||
WHERE pc.posterminal_id = @posterminalId AND pc.category_id = cats.id
|
||||
)
|
||||
`;
|
||||
|
||||
/** setOff: remove a single category from a single terminal. */
|
||||
/** setOff: remove a category and all its subcategories from a terminal. */
|
||||
export const SET_OFF = `
|
||||
;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
DELETE FROM posterminalcategory
|
||||
WHERE posterminal_id = @posterminalId AND category_id = @categoryId
|
||||
WHERE posterminal_id = @posterminalId
|
||||
AND category_id IN (SELECT id FROM cats)
|
||||
`;
|
||||
|
||||
/** setOnAll: enable ALL company categories on one terminal. */
|
||||
@@ -170,7 +182,7 @@ WHERE EXISTS (
|
||||
WHERE ca.article_id = a.id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
)
|
||||
AND DATEDIFF_BIG(second, '1970-01-01', a.updated_at) > @cursor
|
||||
AND (DATEDIFF_BIG(second, '1970-01-01', a.updated_at) * 1000000 + (a.id % 1000000)) > @cursor
|
||||
`;
|
||||
|
||||
export const COUNT_CATEGORIES = `
|
||||
@@ -219,7 +231,7 @@ WHERE a.articlelist_id IS NOT NULL
|
||||
WHERE ca.article_id = a.id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
)
|
||||
AND DATEDIFF_BIG(second, '1970-01-01', a.updated_at) > @cursor
|
||||
AND (DATEDIFF_BIG(second, '1970-01-01', a.updated_at) * 1000000 + (a.id % 1000000)) > @cursor
|
||||
`;
|
||||
|
||||
export const MAX_ORDER_ID = `
|
||||
@@ -263,7 +275,7 @@ SELECT TOP (@limit)
|
||||
COALESCE(pr.net, 0) AS netPrice,
|
||||
COALESCE(ptax.rate, ctax.rate, 0) AS taxRate,
|
||||
a.created_at AS createdAt,
|
||||
DATEDIFF_BIG(second, '1970-01-01', a.updated_at) AS lastChanged,
|
||||
(DATEDIFF_BIG(second, '1970-01-01', a.updated_at) * 1000000 + (a.id % 1000000)) AS lastChanged,
|
||||
COALESCE(
|
||||
(
|
||||
SELECT TOP 1 p.hash
|
||||
@@ -321,6 +333,7 @@ SELECT TOP (@limit)
|
||||
) AS sort,
|
||||
a.track_stock AS trackStock,
|
||||
CASE
|
||||
WHEN a.track_stock = 0 THEN 0
|
||||
WHEN a.articlelist_id IS NOT NULL AND EXISTS (
|
||||
SELECT 1 FROM articlelistarticle ala WHERE ala.articlelist_id = a.articlelist_id
|
||||
) THEN COALESCE((
|
||||
@@ -339,6 +352,7 @@ SELECT TOP (@limit)
|
||||
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WHERE asup.article_id = ca.id)
|
||||
)
|
||||
WHERE m.company_id = a.company_id
|
||||
AND l.warehouse_id IS NOT NULL
|
||||
GROUP BY ca.id
|
||||
) comp_stock ON comp_stock.comp_id = ala.article_id
|
||||
WHERE ala.articlelist_id = a.articlelist_id
|
||||
@@ -350,6 +364,7 @@ SELECT TOP (@limit)
|
||||
INNER JOIN manifestarticle ma ON ma.id = l.manifestarticle_id
|
||||
INNER JOIN manifest m ON m.id = ma.manifest_id
|
||||
WHERE m.company_id = a.company_id
|
||||
AND l.warehouse_id IS NOT NULL
|
||||
AND (
|
||||
ma.sku = a.sku
|
||||
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WHERE asup.article_id = a.id)
|
||||
@@ -373,8 +388,8 @@ WHERE EXISTS (
|
||||
WHERE ca.article_id = a.id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
)
|
||||
AND DATEDIFF_BIG(second, '1970-01-01', a.updated_at) > @cursor
|
||||
ORDER BY DATEDIFF_BIG(second, '1970-01-01', a.updated_at) ASC, a.id ASC
|
||||
AND (DATEDIFF_BIG(second, '1970-01-01', a.updated_at) * 1000000 + (a.id % 1000000)) > @cursor
|
||||
ORDER BY (DATEDIFF_BIG(second, '1970-01-01', a.updated_at) * 1000000 + (a.id % 1000000)) ASC
|
||||
`;
|
||||
|
||||
export const LIST_POS_PRODUCT_CATEGORIES = `
|
||||
|
||||
@@ -4,7 +4,7 @@ import { translateQueries } from './translate.js';
|
||||
const queries = translateQueries(source, 'posterminal');
|
||||
export const {
|
||||
CREATE, DELETE_BY_COMPANY_AND_ID, GET_BY_ID, LIST_BY_COMPANY,
|
||||
LIST_CATEGORY_IDS, POSTERMINAL_IDS_BY_COMPANY, SET_OFF, SET_OFF_ALL, UPDATE,
|
||||
LIST_CATEGORY_IDS, POSTERMINAL_IDS_BY_COMPANY, SET_OFF_ALL, UPDATE,
|
||||
FIND_BY_PAIRINGPIN, PAIR, SET_MAX_KNOWN_OBITUARY_ID,
|
||||
FIND_BY_TOKEN, COUNT_PRODUCTS, COUNT_CATEGORIES, COUNT_CUSTOMERS,
|
||||
COUNT_CUSTOMER_GROUPS, COUNT_COMPOSITE_PRODUCTS, MAX_ORDER_ID,
|
||||
@@ -14,9 +14,24 @@ export const {
|
||||
} = queries;
|
||||
|
||||
export const SET_ON = `
|
||||
INSERT INTO posterminalcategory (posterminal_id, category_id)
|
||||
VALUES (@posterminalId, @categoryId)
|
||||
ON CONFLICT (posterminal_id, category_id) DO NOTHING
|
||||
WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT OR IGNORE INTO posterminalcategory (posterminal_id, category_id)
|
||||
SELECT @posterminalId, id FROM cats
|
||||
`;
|
||||
|
||||
export const SET_OFF = `
|
||||
WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
DELETE FROM posterminalcategory
|
||||
WHERE posterminal_id = @posterminalId
|
||||
AND category_id IN (SELECT id FROM cats)
|
||||
`;
|
||||
|
||||
export const SET_ON_ALL = `
|
||||
@@ -25,9 +40,8 @@ WITH RECURSIVE cats AS (
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT INTO posterminalcategory (posterminal_id, category_id)
|
||||
SELECT @posterminalId, id FROM cats WHERE 1
|
||||
ON CONFLICT (posterminal_id, category_id) DO NOTHING
|
||||
INSERT OR IGNORE INTO posterminalcategory (posterminal_id, category_id)
|
||||
SELECT @posterminalId, id FROM cats
|
||||
`;
|
||||
|
||||
export const LIST_POS_CUSTOMER_GROUPS = `
|
||||
@@ -148,7 +162,7 @@ SELECT
|
||||
COALESCE(pr.net, 0) AS netPrice,
|
||||
COALESCE(ptax.rate, ctax.rate, 0) AS taxRate,
|
||||
a.created_at AS createdAt,
|
||||
CAST(strftime('%s', a.updated_at) AS INTEGER) AS lastChanged,
|
||||
(CAST(strftime('%s', a.updated_at) AS INTEGER) * 1000000 + (a.id % 1000000)) AS lastChanged,
|
||||
COALESCE(
|
||||
(
|
||||
SELECT p.hash
|
||||
@@ -210,6 +224,7 @@ SELECT
|
||||
) AS sort,
|
||||
a.track_stock AS trackStock,
|
||||
CASE
|
||||
WHEN a.track_stock = 0 THEN 0
|
||||
WHEN a.articlelist_id IS NOT NULL AND EXISTS (
|
||||
SELECT 1 FROM articlelistarticle ala WHERE ala.articlelist_id = a.articlelist_id
|
||||
) THEN COALESCE((
|
||||
@@ -228,6 +243,7 @@ SELECT
|
||||
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WHERE asup.article_id = ca.id)
|
||||
)
|
||||
WHERE m.company_id = a.company_id
|
||||
AND l.warehouse_id IS NOT NULL
|
||||
GROUP BY ca.id
|
||||
) comp_stock ON comp_stock.comp_id = ala.article_id
|
||||
WHERE ala.articlelist_id = a.articlelist_id
|
||||
@@ -239,6 +255,7 @@ SELECT
|
||||
INNER JOIN manifestarticle ma ON ma.id = l.manifestarticle_id
|
||||
INNER JOIN manifest m ON m.id = ma.manifest_id
|
||||
WHERE m.company_id = a.company_id
|
||||
AND l.warehouse_id IS NOT NULL
|
||||
AND (
|
||||
ma.sku = a.sku
|
||||
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WHERE asup.article_id = a.id)
|
||||
@@ -262,8 +279,8 @@ WHERE EXISTS (
|
||||
WHERE ca.article_id = a.id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
)
|
||||
AND CAST(strftime('%s', a.updated_at) AS INTEGER) > @cursor
|
||||
ORDER BY lastChanged ASC, a.id ASC
|
||||
AND (CAST(strftime('%s', a.updated_at) AS INTEGER) * 1000000 + (a.id % 1000000)) > @cursor
|
||||
ORDER BY (CAST(strftime('%s', a.updated_at) AS INTEGER) * 1000000 + (a.id % 1000000)) ASC
|
||||
LIMIT @limit
|
||||
`;
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@ import makeRunner from '../runner.js';
|
||||
function normalizeCursor(cursor) {
|
||||
const n = Number(cursor) || 0;
|
||||
if (n <= 0) return 0;
|
||||
return n >= 1e11 ? Math.floor(n / 1000) : Math.floor(n);
|
||||
if (n < 1e11) return Math.floor(n * 1000000);
|
||||
if (n < 1e14) return Math.floor((n / 1000) * 1000000);
|
||||
return Math.floor(n);
|
||||
}
|
||||
|
||||
export default function getCompositeProductCount(provider) {
|
||||
|
||||
@@ -5,7 +5,9 @@ import makeRunner from '../runner.js';
|
||||
function normalizeCursor(cursor) {
|
||||
const n = Number(cursor) || 0;
|
||||
if (n <= 0) return 0;
|
||||
return n >= 1e11 ? Math.floor(n / 1000) : Math.floor(n);
|
||||
if (n < 1e11) return Math.floor(n * 1000000);
|
||||
if (n < 1e14) return Math.floor((n / 1000) * 1000000);
|
||||
return Math.floor(n);
|
||||
}
|
||||
|
||||
export default function getProductCount(provider) {
|
||||
|
||||
@@ -19,7 +19,9 @@ import makeRunner from '../runner.js';
|
||||
function normalizeCursor(cursor) {
|
||||
const n = Number(cursor) || 0;
|
||||
if (n <= 0) return 0;
|
||||
return n >= 1e11 ? Math.floor(n / 1000) : Math.floor(n);
|
||||
if (n < 1e11) return Math.floor(n * 1000000);
|
||||
if (n < 1e14) return Math.floor((n / 1000) * 1000000);
|
||||
return Math.floor(n);
|
||||
}
|
||||
|
||||
function formatDateTime(value) {
|
||||
|
||||
@@ -21,25 +21,121 @@ export default function setOff(provider) {
|
||||
? SQLITE_LIST_CATEGORY_IDS
|
||||
: MSSQL_LIST_CATEGORY_IDS;
|
||||
|
||||
const addCategoryObituarySql = `
|
||||
INSERT INTO posterminalobituary (posterminal_id, entity_type, entity_id)
|
||||
VALUES (@posterminalId, 'category', @categoryId)
|
||||
`;
|
||||
|
||||
const addArticleObituariesSql = `
|
||||
INSERT INTO posterminalobituary (posterminal_id, entity_type, entity_id)
|
||||
SELECT DISTINCT @posterminalId, 'article', ca.article_id
|
||||
FROM categoryarticle ca
|
||||
WHERE ca.category_id = @categoryId
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM categoryarticle ca2
|
||||
INNER JOIN posterminalcategory pc ON pc.category_id = ca2.category_id
|
||||
WHERE ca2.article_id = ca.article_id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
AND pc.category_id <> @categoryId
|
||||
const touchSql = isSqlite
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
`;
|
||||
UPDATE category SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
||||
WHERE id IN (SELECT id FROM cats)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
UPDATE category SET updated_at = SYSUTCDATETIME()
|
||||
WHERE id IN (SELECT id FROM cats)`;
|
||||
|
||||
const touchArticlesSql = isSqlite
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
UPDATE article
|
||||
SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
||||
WHERE id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
UNION
|
||||
SELECT child.id FROM article child
|
||||
WHERE child.parentarticle_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
)
|
||||
UNION
|
||||
SELECT parent.parentarticle_id FROM article parent
|
||||
WHERE parent.id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
) AND parent.parentarticle_id IS NOT NULL
|
||||
)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
UPDATE article
|
||||
SET updated_at = SYSUTCDATETIME()
|
||||
WHERE id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
UNION
|
||||
SELECT child.id FROM article child
|
||||
WHERE child.parentarticle_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
)
|
||||
UNION
|
||||
SELECT parent.parentarticle_id FROM article parent
|
||||
WHERE parent.id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
) AND parent.parentarticle_id IS NOT NULL
|
||||
)`;
|
||||
|
||||
const addCategoryObituarySql = isSqlite
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT INTO posterminalobituary (posterminal_id, entity_type, entity_id)
|
||||
SELECT pc.posterminal_id, 'category', pc.category_id
|
||||
FROM posterminalcategory pc
|
||||
WHERE pc.posterminal_id = @posterminalId
|
||||
AND pc.category_id IN (SELECT id FROM cats)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT INTO posterminalobituary (posterminal_id, entity_type, entity_id)
|
||||
SELECT pc.posterminal_id, 'category', pc.category_id
|
||||
FROM posterminalcategory pc
|
||||
WHERE pc.posterminal_id = @posterminalId
|
||||
AND pc.category_id IN (SELECT id FROM cats)`;
|
||||
|
||||
const addArticleObituariesSql = isSqlite
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT INTO posterminalobituary (posterminal_id, entity_type, entity_id)
|
||||
SELECT DISTINCT @posterminalId, 'article', ca.article_id
|
||||
FROM categoryarticle ca
|
||||
WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM categoryarticle ca2
|
||||
INNER JOIN posterminalcategory pc ON pc.category_id = ca2.category_id
|
||||
WHERE ca2.article_id = ca.article_id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
AND pc.category_id NOT IN (SELECT id FROM cats)
|
||||
)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
INSERT INTO posterminalobituary (posterminal_id, entity_type, entity_id)
|
||||
SELECT DISTINCT @posterminalId, 'article', ca.article_id
|
||||
FROM categoryarticle ca
|
||||
WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM categoryarticle ca2
|
||||
INNER JOIN posterminalcategory pc ON pc.category_id = ca2.category_id
|
||||
WHERE ca2.article_id = ca.article_id
|
||||
AND pc.posterminal_id = @posterminalId
|
||||
AND pc.category_id NOT IN (SELECT id FROM cats)
|
||||
)`;
|
||||
|
||||
/**
|
||||
* Removes a category assignment from a posterminal (turns it off).
|
||||
@@ -84,6 +180,9 @@ export default function setOff(provider) {
|
||||
categoryId,
|
||||
});
|
||||
|
||||
await runner.query(touchSql, { categoryId });
|
||||
await runner.query(touchArticlesSql, { categoryId });
|
||||
|
||||
const result = await runner.query(listCatIdsSql, { posterminalId });
|
||||
|
||||
return {
|
||||
|
||||
@@ -21,30 +21,110 @@ export default function setOn(provider) {
|
||||
? SQLITE_LIST_CATEGORY_IDS
|
||||
: MSSQL_LIST_CATEGORY_IDS;
|
||||
const touchSql = isSqlite
|
||||
? "UPDATE category SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = @categoryId"
|
||||
: 'UPDATE category SET updated_at = SYSUTCDATETIME() WHERE id = @categoryId';
|
||||
const touchArticlesSql = isSqlite
|
||||
? `UPDATE article
|
||||
SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
||||
WHERE id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id = @categoryId
|
||||
)`
|
||||
: `UPDATE article
|
||||
SET updated_at = SYSUTCDATETIME()
|
||||
WHERE id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id = @categoryId
|
||||
)`;
|
||||
|
||||
const clearObituariesSql = `
|
||||
DELETE FROM posterminalobituary
|
||||
WHERE posterminal_id = @posterminalId
|
||||
AND (
|
||||
(entity_type = 'category' AND entity_id = @categoryId)
|
||||
OR (entity_type = 'article' AND entity_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id = @categoryId
|
||||
))
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
`;
|
||||
UPDATE category SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
||||
WHERE id IN (SELECT id FROM cats)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
UPDATE category SET updated_at = SYSUTCDATETIME()
|
||||
WHERE id IN (SELECT id FROM cats)`;
|
||||
|
||||
const touchArticlesSql = isSqlite
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
UPDATE article
|
||||
SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
||||
WHERE id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
UNION
|
||||
SELECT child.id FROM article child
|
||||
WHERE child.parentarticle_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
)
|
||||
UNION
|
||||
SELECT parent.parentarticle_id FROM article parent
|
||||
WHERE parent.id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
) AND parent.parentarticle_id IS NOT NULL
|
||||
)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
UPDATE article
|
||||
SET updated_at = SYSUTCDATETIME()
|
||||
WHERE id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
UNION
|
||||
SELECT child.id FROM article child
|
||||
WHERE child.parentarticle_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
)
|
||||
UNION
|
||||
SELECT parent.parentarticle_id FROM article parent
|
||||
WHERE parent.id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
) AND parent.parentarticle_id IS NOT NULL
|
||||
)`;
|
||||
|
||||
const clearObituariesSql = isSqlite
|
||||
? `WITH RECURSIVE cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
DELETE FROM posterminalobituary
|
||||
WHERE posterminal_id = @posterminalId
|
||||
AND (
|
||||
(entity_type = 'category' AND entity_id IN (SELECT id FROM cats))
|
||||
OR (entity_type = 'article' AND entity_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
UNION
|
||||
SELECT child.id FROM article child
|
||||
WHERE child.parentarticle_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
)
|
||||
UNION
|
||||
SELECT parent.parentarticle_id FROM article parent
|
||||
WHERE parent.id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
) AND parent.parentarticle_id IS NOT NULL
|
||||
))
|
||||
)`
|
||||
: `;WITH cats AS (
|
||||
SELECT id FROM category WHERE id = @categoryId
|
||||
UNION ALL
|
||||
SELECT c.id FROM category c INNER JOIN cats ON c.parent_id = cats.id
|
||||
)
|
||||
DELETE FROM posterminalobituary
|
||||
WHERE posterminal_id = @posterminalId
|
||||
AND (
|
||||
(entity_type = 'category' AND entity_id IN (SELECT id FROM cats))
|
||||
OR (entity_type = 'article' AND entity_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
UNION
|
||||
SELECT child.id FROM article child
|
||||
WHERE child.parentarticle_id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
)
|
||||
UNION
|
||||
SELECT parent.parentarticle_id FROM article parent
|
||||
WHERE parent.id IN (
|
||||
SELECT ca.article_id FROM categoryarticle ca WHERE ca.category_id IN (SELECT id FROM cats)
|
||||
) AND parent.parentarticle_id IS NOT NULL
|
||||
))
|
||||
)`;
|
||||
|
||||
/**
|
||||
* Assigns a category to a posterminal (turns it on for that category).
|
||||
|
||||
Reference in New Issue
Block a user