Beispiel #1
0
        /// <summary>
        /// </summary>
        /// <param name="model"></param>
        /// <param name="cls"></param>
        /// <param name="definition"></param>
        /// <returns></returns>
        public SqlScript Setup(PersistentModel model, IBSharpClass cls, XElement definition)
        {
            Model      = model;
            MyClass    = cls;
            Definition = definition;
            Name       = definition.Attr("code");
            Comment    = definition.Attr("name");
            External   = definition.Attr("external");
            Position   = definition.Attr("position", "After").To <ScriptPosition>();
            Mode       = definition.Attr("mode", "Create").To <ScriptMode>();
            DbDialect  = definition.Attr("dialect", "Ansi").To <DbDialect>();
            if (string.IsNullOrWhiteSpace(definition.Value) && string.IsNullOrWhiteSpace(External))
            {
                External = Name;
            }
            if (!string.IsNullOrWhiteSpace(External) && !External.EndsWith(".sql"))
            {
                External += ".sql";
            }

            XElement[] subscripts = definition.Elements("script").ToArray();
            if (0 == subscripts.Length)
            {
                if (string.IsNullOrWhiteSpace(External))
                {
                    Text = definition.Value;
                }
                else
                {
                    Text = model.ResolveExternalContent(definition, External);
                }
            }
            else
            {
                foreach (XElement subscriptdef in definition.Elements("script"))
                {
                    var subscript = new SqlScript();
                    subscript.Parent = this;
                    subscript.Setup(Model, cls, subscriptdef);
                    SubScripts.Add(subscript);
                }
            }
            return(this);
        }
        public virtual void LoadScripts(string scriptConfigName = "scriptConfig.xml")
        {
            var config = XElement.Load(scriptConfigName);

            var mainScriptSource = config.Descendants("MainScriptSource").Select(elem => { return(elem.Value); }).ElementAt(0);
            var scriptXMLParams  = config.Descendants("Parameters").ToList();

            MainScript = new Script(mainScriptSource, null);


            var subScriptSources = config.Descendants("SubScriptSource").ToList();

            subScriptSources.ForEach(elem =>
            {
                var scriptSource = elem.Descendants("SourceName").Select(source => { return(source.Value); }).ElementAt(0);

                var functionNamesNode = elem.Descendants("FunctionNames").ToList();
                var functionDataPairs = functionNamesNode.Select(node =>
                {
                    return(new Tuple <string, bool>(node.Value, bool.Parse(node.Attribute("NeedCompile").Value)));
                });

                var newSubScript = new Script(elem.Value, functionDataPairs);
                SubScripts.Add(newSubScript);
            });

            scriptXMLParams.ForEach(elem =>
            {
                var currentParameter          = new Parameter();
                currentParameter.IsSerialized = bool.Parse(elem.Attribute("Serialized").Value);

                currentParameter.Name  = elem.Name.LocalName;
                currentParameter.Value = elem.Value;

                ScriptParameters.Add(currentParameter);
            });

            InjectFunctions(SubScripts);
            InjectParameters(ScriptParameters);
        }