Merge branch 'feature/parameters-oracle'

This commit is contained in:
SPRINX0\prochazka
2024-12-20 07:46:51 +01:00
5 changed files with 65 additions and 2 deletions

View File

@@ -124,6 +124,7 @@ export interface ParameterInfo extends NamedObjectInfo {
parameterName?: string; parameterName?: string;
dataType: string; dataType: string;
parameterMode?: ParameterMode; parameterMode?: ParameterMode;
position?: number;
} }
export interface CallableObjectInfo extends SqlObjectInfo { export interface CallableObjectInfo extends SqlObjectInfo {

View File

@@ -6,13 +6,26 @@
import AppObjectCore from './AppObjectCore.svelte'; import AppObjectCore from './AppObjectCore.svelte';
export let data; export let data;
function createParameterTitle(parameter) {
if (!parameter.parameterName) return parameter.position ?? null;
if (parameter.parameterName.startsWith('@')) return parameter.parameterName.substring(1);
return data.parameterName;
}
function createParameterExtInfo(parameter) {
if (parameter.parameterMode && parameter.parameterMode !== 'IN') {
return `${parameter.dataType} ${parameter.parameterMode}`;
}
return parameter.dataType;
}
</script> </script>
<AppObjectCore <AppObjectCore
{...$$restProps} {...$$restProps}
{data} {data}
title={data.parameterName?.startsWith('@') ? data.parameterName.substring(1) : data.parameterName} title={createParameterTitle(data)}
extInfo={data.parameterMode && data.parameterMode !== 'IN' ? `${data.dataType} ${data.parameterMode}` : data.dataType} extInfo={createParameterExtInfo(data)}
icon={'icon parameter'} icon={'icon parameter'}
disableHover disableHover
/> />

View File

@@ -68,6 +68,29 @@ class Analyser extends DatabaseAnalyser {
const routines = await this.analyserQuery('routines', ['procedures', 'functions'], { const routines = await this.analyserQuery('routines', ['procedures', 'functions'], {
$owner: this.dbhan.database, $owner: this.dbhan.database,
}); });
const parameters = await this.analyserQuery('parameters', ['procedures', 'functions'], {
$owner: this.dbhan.database,
});
console.dir(parameters, { depth: 4 });
const routineToParams = parameters.rows.reduce((acc, row) => {
if (!acc[row.PURE_NAME]) acc[row.PURE_NAME] = [];
acc[row.PURE_NAME].push({
pureName: row.PURE_NAME,
parameterName: row.PARAMETER_NAME,
dataType: row.DATA_TYPE,
charMaxLength: row.CHAR_MAX,
numericPrecision: row.NUMERIC_PRECISION,
numericScale: row.NUMERIC_SCALE,
parameterMode: row.PARAMETER_MODE,
position: row.ORDINAL_POSITION ?? acc[row.PURE_NAME].length,
});
return acc;
}, {});
this.feedback({ analysingMessage: 'Loading indexes' }); this.feedback({ analysingMessage: 'Loading indexes' });
const indexes = await this.analyserQuery('indexes', ['tables'], { $owner: this.dbhan.database }); const indexes = await this.analyserQuery('indexes', ['tables'], { $owner: this.dbhan.database });
this.feedback({ analysingMessage: 'Loading unique names' }); this.feedback({ analysingMessage: 'Loading unique names' });
@@ -177,6 +200,7 @@ class Analyser extends DatabaseAnalyser {
// schemaName: proc.schema_name, // schemaName: proc.schema_name,
createSql: `SET SQLTERMINATOR "/"\nCREATE ${proc.source_code}\n/\n`, createSql: `SET SQLTERMINATOR "/"\nCREATE ${proc.source_code}\n/\n`,
contentHash: proc.hash_code, contentHash: proc.hash_code,
parameters: routineToParams[proc.pure_name],
})), })),
functions: routines.rows functions: routines.rows
.filter(x => x.object_type == 'FUNCTION') .filter(x => x.object_type == 'FUNCTION')
@@ -186,6 +210,7 @@ class Analyser extends DatabaseAnalyser {
pureName: func.pure_name, pureName: func.pure_name,
// schemaName: func.schema_name, // schemaName: func.schema_name,
contentHash: func.hash_code, contentHash: func.hash_code,
parameters: routineToParams[func.pure_name],
})), })),
triggers: triggers.rows.map(row => ({ triggers: triggers.rows.map(row => ({
pureName: row.TRIGGER_NAME, pureName: row.TRIGGER_NAME,

View File

@@ -5,6 +5,7 @@ const foreignKeys = require('./foreignKeys');
const views = require('./views'); const views = require('./views');
const matviews = require('./matviews'); const matviews = require('./matviews');
const routines = require('./routines'); const routines = require('./routines');
const parameters = require('./parameters');
const indexes = require('./indexes'); // use mysql const indexes = require('./indexes'); // use mysql
const triggers = require('./triggers'); const triggers = require('./triggers');
//const indexcols = require('./indexcols'); //const indexcols = require('./indexcols');
@@ -23,6 +24,7 @@ module.exports = {
foreignKeys, foreignKeys,
views, views,
routines, routines,
parameters,
matviews, matviews,
indexes, indexes,
triggers, triggers,

View File

@@ -0,0 +1,22 @@
module.exports = `
SELECT
o.OBJECT_NAME AS pure_name,
PACKAGE_NAME,
ARGUMENT_NAME AS parameter_name,
POSITION AS ordinal_position,
DATA_TYPE AS data_type,
CHAR_LENGTH AS char_max_length,
DATA_PRECISION AS numeric_precision,
DATA_SCALE AS numeric_scale,
IN_OUT AS parameter_mode
FROM
all_objects o
LEFT JOIN
all_arguments a
ON o.object_id = a.object_id
WHERE
o.object_type IN ('FUNCTION', 'PROCEDURE')
AND o.OWNER = '$owner'
ORDER BY
POSITION;
`;