private void parseProcedureStmt(TStoredProcedureSqlStatement procedureStmt)
        {
            if (procedureStmt.StoredProcedureName == null)
            {
                return;
            }
            ProcedureMetaData procedureMetaData = getProcedureMetaData(procedureStmt.StoredProcedureName);

            procedureMetaData = getProcedureMetaData(procedureMetaData, true);

            TObjectName procedureName = procedureStmt.StoredProcedureName;
            procedure   procedure     = new procedure();

            procedure.name          = procedureMetaData.DisplayName;
            procedure.owner         = getOwnerString(procedureMetaData);
            procedure.coordinate    = procedureName.startToken.lineNo + "," + procedureName.startToken.columnNo;
            procedure.highlightInfo = procedureName.startToken.offset + "," + (procedureName.endToken.offset - procedureName.startToken.offset + procedureName.endToken.astext.Length);
            List <procedure> procedureList = getProcedureList(procedures.Item1);

            procedureList.Add(procedure);
            procedures.Item1.procedures = procedureList.ToArray();


            parseProcedureLineage(procedureStmt, procedureMetaData, procedure);
        }
        private ProcedureMetaData getProcedureMetaData(ProcedureMetaData procedureMetaData, bool replace)
        {
            int index = procedures.Item2.IndexOf(procedureMetaData);

            if (index != -1)
            {
                if (replace)
                {
                    procedures.Item2.RemoveAt(index);
                    procedures.Item2.Add(procedureMetaData);
                    return(procedureMetaData);
                }
                else
                {
                    return(procedures.Item2[index]);
                }
            }
            else
            {
                if (replace)
                {
                    procedures.Item2.Add(procedureMetaData);
                    return(procedureMetaData);
                }
                else
                {
                    return(null);
                }
            }
        }
        public virtual ProcedureMetaData getProcedureMetaData(ProcedureMetaData parentProcedure, TObjectName procedureName)
        {
            ProcedureMetaData procedureMetaData = new ProcedureMetaData(vendor, strict);

            procedureMetaData.Name = procedureName.PartString == null ? procedureName.ObjectString : procedureName.PartString;
            if (procedureName.SchemaString != null)
            {
                procedureMetaData.SchemaName = procedureName.SchemaString;
            }
            else
            {
                procedureMetaData.SchemaName        = parentProcedure.SchemaName;
                procedureMetaData.SchemaDisplayName = parentProcedure.SchemaDisplayName;
            }

            if (isNotEmpty(procedureName.DatabaseString))
            {
                procedureMetaData.CatalogName = procedureName.DatabaseString;
            }
            else
            {
                procedureMetaData.CatalogName        = parentProcedure.CatalogName;
                procedureMetaData.CatalogDisplayName = parentProcedure.CatalogDisplayName;
            }
            return(procedureMetaData);
        }
 public override void preVisit(TMssqlExecute statement)
 {
     if (statement.ModuleName != null)
     {
         TObjectName       procedureName     = statement.ModuleName;
         ProcedureMetaData procedureMetaData = getProcedureMetaData(procedureName);
         setProcedureDlinage(procedureMetaData, procedureName);
     }
 }
 public override void preVisit(TCallStatement statement)
 {
     if (statement.RoutineName != null)
     {
         TObjectName       procedureName     = statement.RoutineName;
         ProcedureMetaData procedureMetaData = getProcedureMetaData(procedureName);
         setProcedureDlinage(procedureMetaData, procedureName);
     }
 }
 public override void preVisit(TFunctionCall node)
 {
     if (node.FunctionName != null)
     {
         TObjectName       procedureName     = node.FunctionName;
         ProcedureMetaData procedureMetaData = getProcedureMetaData(procedureName);
         setProcedureDlinage(procedureMetaData, procedureName);
     }
 }
        private string getOwnerString(ProcedureMetaData procedureMetaData)
        {
            StringBuilder buffer = new StringBuilder();

            if (!SQLUtil.isEmpty(procedureMetaData.CatalogDisplayName))
            {
                buffer.Append(procedureMetaData.CatalogDisplayName).Append(".");
            }
            if (!SQLUtil.isEmpty(procedureMetaData.SchemaDisplayName))
            {
                buffer.Append(procedureMetaData.SchemaDisplayName);
            }
            return(buffer.ToString().ToUpper());
        }
            public functionVisitor(ProcedureRelationScanner outerInstance, ProcedureMetaData parentProcedure, procedure procedure)
            {
                this.outerInstance            = outerInstance;
                this.parentProcedure          = parentProcedure;
                this.targetProcedure          = new targetProcedure();
                targetProcedure.coordinate    = procedure.coordinate;
                targetProcedure.highlightInfo = procedure.highlightInfo;
                targetProcedure.name          = procedure.name;
                targetProcedure.owner         = procedure.owner;
                List <targetProcedure> targetProcedureList = getTargetProcedureList(outerInstance.procedures.Item1);

                targetProcedureList.Add(targetProcedure);
                outerInstance.procedures.Item1.targetProcedures = targetProcedureList.ToArray();
            }
        private ProcedureMetaData getProcedureMetaData(TObjectName procedureName)
        {
            ProcedureMetaData procedureMetaData = new ProcedureMetaData(vendor, strict);

            procedureMetaData.Name       = procedureName.PartString == null ? procedureName.ObjectString : procedureName.PartString;
            procedureMetaData.SchemaName = procedureName.SchemaString;
            if (isNotEmpty(procedureName.DatabaseString))
            {
                procedureMetaData.CatalogName = procedureName.DatabaseString;
            }
            else
            {
                procedureMetaData.CatalogName = database;
            }
            return(procedureMetaData);
        }
            internal virtual void setProcedureDlinage(ProcedureMetaData procedureMetaData, TObjectName procedureName)
            {
                if (procedureMetaData == null)
                {
                    return;
                }
                sourceProcedure sourceProcedure = new sourceProcedure();

                sourceProcedure.name          = procedureMetaData.DisplayName;
                sourceProcedure.owner         = outerInstance.getOwnerString(procedureMetaData);
                sourceProcedure.coordinate    = procedureName.startToken.lineNo + "," + procedureName.startToken.columnNo;
                sourceProcedure.highlightInfo = procedureName.startToken.offset + "," + (procedureName.endToken.offset - procedureName.startToken.offset + procedureName.endToken.astext.Length);

                List <sourceProcedure> sourceProcedureList = getSourceProcedureList(targetProcedure);

                sourceProcedureList.Add(sourceProcedure);
                targetProcedure.sourceProcedures = sourceProcedureList.ToArray();
            }
            internal virtual ProcedureMetaData getProcedureMetaData(TObjectName procedureName)
            {
                ProcedureMetaData procedureMetaData = outerInstance.getProcedureMetaData(parentProcedure, procedureName);

                procedureMetaData = outerInstance.getProcedureMetaData(procedureMetaData, false);
                if (procedureMetaData == null)
                {
                    return(null);
                }
                if (string.ReferenceEquals(procedureMetaData.CatalogName, null))
                {
                    procedureMetaData.CatalogName        = parentProcedure.CatalogName;
                    procedureMetaData.CatalogDisplayName = parentProcedure.CatalogDisplayName;
                }
                if (string.ReferenceEquals(procedureMetaData.SchemaName, null))
                {
                    procedureMetaData.SchemaName        = parentProcedure.SchemaName;
                    procedureMetaData.SchemaDisplayName = parentProcedure.SchemaDisplayName;
                }
                return(procedureMetaData);
            }
Esempio n. 12
0
        private void appendProcedures(Dlineage dlineage, Element dlineageRelation)
        {
            if (dlineage.Procedures != null && dlineage.Procedures.Item2.Count > 0)
            {
                for (int i = 0; i < dlineage.Procedures.Item2.Count; i++)
                {
                    ProcedureMetaData procedure = dlineage.Procedures.Item2[i];

                    Element procedureNode = new Element("procedure");
                    procedureNode.Add(new XAttribute("name", procedure.DisplayFullName));

                    if (procedure.Function)
                    {
                        procedureNode.Add(new XAttribute("isFunction", procedure.DisplayFullName));
                    }

                    if (procedure.Trigger)
                    {
                        procedureNode.Add(new XAttribute("isTrigger", procedure.DisplayFullName));
                    }
                    dlineageRelation.Add(procedureNode);
                }
            }
        }
        private void parseProcedureLineage(TStoredProcedureSqlStatement procedureStmt, ProcedureMetaData procedureMetaData, procedure sourceProcedure)
        {
            functionVisitor fv = new functionVisitor(this, procedureMetaData, sourceProcedure);

            procedureStmt.acceptChildren(fv);
        }