@itwin/ecschema-metadata
Version:
ECObjects core concepts in typescript
305 lines • 11.5 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/************************************************************************************
* All SchemaItem queries for each SchemaItemType are defined here. These queries
* are shared for both 'partial schema' and 'full schema' queries.
***********************************************************************************/
/**
* Query for SchemaItemType KindOfQuantity data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const kindOfQuantity = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object (
'schemaItemType', 'KindOfQuantity',
'name', [koq].[Name],
'label', [koq].[DisplayLabel],
'description', [koq].[Description],
'relativeError', [koq].[RelativeError],
'persistenceUnit', [koq].[PersistenceUnit]
${singleSchema ? `
,'presentationUnits', (
SELECT json_group_array(js."value")
FROM [meta].[KindOfQuantityDef] [koq1], json1.json_each([PresentationUnits]) js
WHERE [koq1].[ECInstanceId] = [koq].[ECInstanceId]
) ` : ""}
) as [item]
FROM
[].[KindOfQuantityDef] [koq]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [koq].[Schema].[Id]
WHERE [schema].[Name] = :schemaName
` : ""}
`;
/**
* Query for SchemaItemType PropertyCategory data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const propertyCategory = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object (
'schemaItemType', 'PropertyCategory',
'name', [pc].[Name],
'label', [pc].[DisplayLabel],
'description', [pc].[Description],
'priority', [pc].[Priority]
) as [item]
FROM
[].[PropertyCategoryDef] [pc]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [pc].[Schema].[Id]
WHERE [schema].[Name] = :schemaName
` : ""}
`;
/**
* Query for SchemaItemType Enumeration data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const enumeration = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object (
'schemaItemType', 'Enumeration',
'name', [ed].[Name],
'label', [ed].[DisplayLabel],
'description', [ed].[Description],
'type', IIF([ed].[Type] = 1281, 'int', IIF([ed].[Type] = 2305, 'string', null)),
'isStrict', IIF([ed].[IsStrict] = 1, json('true'), json('false')),
'enumerators', (
SELECT json_group_array(json(json_object(
'name', json_extract(js."value", '$.Name'),
'value', IFNULL(json_extract(js."value", '$.StringValue'), (json_extract(js."value", '$.IntValue'))),
'label', json_extract(js."value", '$.DisplayLabel'),
'description', json_extract(js."value", '$.Description')
)))
FROM [meta].[ECEnumerationDef] [enumerationDef], json1.json_each([EnumValues]) js
WHERE [enumerationDef].[ECInstanceId] = [ed].[ECInstanceId]
)
) as [item]
FROM
[].[ECEnumerationDef] [ed]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ed].[Schema].[Id]
WHERE [schema].[Name] = :schemaName` : ""}
`;
/**
* Query for SchemaItemType Unit data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const unit = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object (
'schemaItemType', 'Unit',
'name', [ud].[Name],
'label', [ud].[DisplayLabel],
'description', [ud].[Description],
'definition', [ud].[Definition],
'numerator', IIF([ud].[Numerator] IS NULL, NULL, json(format('%.16g', [ud].[Numerator]))),
'denominator', IIF([ud].[Denominator] IS NULL, NULL, json(format('%.16g', [ud].[Denominator]))),
'offset', IIF([ud].[Offset] IS NULL, NULL, json(format('%!.15f', [ud].[Offset]))),
'unitSystem', CONCAT([uss].[Name],'.', [usd].[Name]),
'phenomenon', CONCAT([ps].[Name],'.', [pd].[Name])
) as item
FROM
[].[UnitDef] [ud]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ud].[Schema].[Id]` : ""}
JOIN [meta].[UnitSystemDef] [usd]
ON [usd].[ECInstanceId] = [ud].[UnitSystem].[Id]
JOIN [meta].[ECSchemaDef] [uss]
ON [uss].[ECInstanceId] = [usd].[Schema].[Id]
JOIN [meta].[PhenomenonDef] [pd]
ON [pd].[ECInstanceId] = [ud].[Phenomenon].[Id]
JOIN [meta].[ECSchemaDef] [ps]
ON [ps].[ECInstanceId] = [pd].[Schema].[Id]
WHERE
${singleSchema ? `
[].[Name] = :schemaName AND` : ""}
[].[IsConstant] = 0 AND
[].[InvertingUnit] IS NULL
`;
/**
* Query for SchemaItemType InvertedUnit data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const invertedUnit = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object (
'schemaItemType', 'InvertedUnit',
'name', [ud].[Name],
'label', [ud].[DisplayLabel],
'description', [ud].[Description],
'unitSystem', CONCAT([systemSchema].[Name],'.', [usd].[Name]),
'invertsUnit', IIF([iud].[Name] IS NULL, null, CONCAT([ius].[Name],'.', [iud].[Name]))
) as [item]
FROM
[].[UnitDef] [ud]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ud].[Schema].[Id]` : ""}
JOIN [meta].[UnitSystemDef] [usd]
ON [usd].[ECInstanceId] = [ud].[UnitSystem].[Id]
JOIN [meta].[ECSchemaDef] [systemSchema]
ON [systemSchema].[ECInstanceId] = [usd].[Schema].[Id]
LEFT JOIN [meta].[UnitDef] [iud]
ON [iud].[ECInstanceId] = [ud].[InvertingUnit].[Id]
LEFT JOIN [meta].[ECSchemaDef] [ius]
ON [ius].[ECInstanceId] = [iud].[Schema].[Id]
WHERE
${singleSchema ? `
[].[Name] = :schemaName AND` : ""}
[].[IsConstant] = 0 AND
[].[InvertingUnit] IS NOT NULL
`;
/**
* Query for SchemaItemType Constant data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const constant = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object(
'schemaItemType', 'Constant',
'name', [cd].[Name],
'label', [cd].[DisplayLabel],
'description', [cd].[Description],
'definition', [cd].[Definition],
'numerator', IIF([cd].[Numerator] IS NULL, NULL, json(format('%.16g', [cd].[Numerator]))),
'denominator', IIF([cd].[Denominator] IS NULL, NULL, json(format('%.16g', [cd].[Denominator]))),
'phenomenon', CONCAT([phenomSchema].[Name],'.', [phenomDef].[Name])
) as item
FROM
[].[UnitDef] [cd]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [cd].[Schema].[Id]` : ""}
JOIN [meta].[PhenomenonDef] [phenomDef]
ON [phenomDef].[ECInstanceId] = [cd].[Phenomenon].[Id]
JOIN [meta].[ECSchemaDef] [phenomSchema]
ON [phenomSchema].[ECInstanceId] = [phenomDef].[Schema].[Id]
WHERE
${singleSchema ? `
[].[Name] = :schemaName AND` : ""}
[].[IsConstant] = 1
`;
/**
* Query for SchemaItemType UnitSystem data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const unitSystem = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object (
'schemaItemType', 'UnitSystem',
'name', [us].[Name],
'label', [us].[DisplayLabel],
'description', [us].[Description]
) as [item]
FROM
[].[UnitSystemDef] [us]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [us].[Schema].[Id]
WHERE [schema].[Name] = :schemaName` : ""}
`;
/**
* Query for SchemaItemType Phenomenon data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const phenomenon = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object(
'schemaItemType', 'Phenomenon',
'name', [pd].[Name],
'label', [pd].[DisplayLabel],
'description', [pd].[Description],
'definition', [pd].[Definition]
) as [item]
FROM
[].[PhenomenonDef] [pd]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [pd].[Schema].[Id]
WHERE [schema].[Name] = :schemaName` : ""}
`;
/**
* Query for SchemaItemType Format data.
* @param singleSchema Indicates if a filter and join for a single Schema should be applied.
*/
const format = (singleSchema) => `
SELECT
[].[Schema].[Id] AS [SchemaId],
json_object(
'schemaItemType', 'Format',
'name', [fd].[Name],
'label', [fd].[DisplayLabel],
'description', [fd].[Description],
'type', json_extract([fd].[NumericSpec], '$.type'),
'precision', json_extract([fd].[NumericSpec], '$.precision'),
'roundFactor', json_extract([fd].[NumericSpec], '$.roundFactor'),
'minWidth', json_extract([fd].[NumericSpec], '$.minWidth'),
'showSignOption', json_extract([fd].[NumericSpec], '$.showSignOption'),
'decimalSeparator', json_extract([fd].[NumericSpec], '$.decimalSeparator'),
'thousandSeparator', json_extract([fd].[NumericSpec], '$.thousandSeparator'),
'uomSeparator', json_extract([fd].[NumericSpec], '$.uomSeparator'),
'scientificType', json_extract([fd].[NumericSpec], '$.scientificType'),
'stationOffsetSize', json_extract([fd].[NumericSpec], '$.stationOffsetSize'),
'stationSeparator', json_extract([fd].[NumericSpec], '$.stationSeparator'),
'formatTraits', json_extract([fd].[NumericSpec], '$.formatTraits')
${singleSchema ? `
,'composite', (
SELECT
json_object(
'spacer', json_extract([fd1].[CompositeSpec], '$.spacer'),
'includeZero', json(IIF(json_extract([fd1].[CompositeSpec], '$.includeZero') = 1, 'true', IIF(json_extract([fd1].[CompositeSpec], '$.includeZero') = 0, 'false', null))),
'units', (
SELECT json_group_array(json(json_object(
'name', CONCAT([sd].[Name], '.', [ud].[Name]),
'label', [fud].[Label]
)))
FROM [meta].[FormatDef] [fd2]
LEFT JOIN [meta].[FormatCompositeUnitDef] [fud] ON [fud].[Format].[Id] = [fd2].[ECInstanceId]
LEFT JOIN [meta].[UnitDef] [ud] ON [ud].[ECInstanceId] = [fud].[Unit].[Id]
INNER JOIN [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [ud].[Schema].[Id]
WHERE [fd2].[ECInstanceId] = [fd1].[ECInstanceId]
)
)
FROM [meta].[FormatDef] [fd1]
WHERE [fd1].[ECInstanceId]= [fd].[ECInstanceId] AND [fd1].[CompositeSpec] IS NOT NULL
)` : ""}
) AS item
FROM
[].[FormatDef] [fd]
${singleSchema ? `
JOIN
[].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [fd].[Schema].[Id]
WHERE [schema].[Name] = :schemaName` : ""}
`;
/**
* Queries for each SchemaItemType
* @internal
*/
// eslint-disable-next-line @typescript-eslint/naming-convention
export const SchemaItemQueries = {
kindOfQuantity,
propertyCategory,
enumeration,
unit,
invertedUnit,
constant,
unitSystem,
phenomenon,
format
};
//# sourceMappingURL=SchemaItemQueries.js.map