예제 #1
0
        /*--------------------------------------------------------------------------------------------*/
        public static T Table <T>(this T pElem, out IWeaverVarAlias pAlias) where T : IWeaverElement
        {
            var t = new WeaverStepTable(pElem, out pAlias);

            pElem.Path.AddItem(t);
            return(pElem);
        }
예제 #2
0
        /*--------------------------------------------------------------------------------------------*/
        private IWeaverPathPipeEnd MakePropertyKey <T>(string pElement, Expression <Func <T, object> > pProp,
                                                       IWeaverVarAlias pGroupVar = null) where T : IWeaverElement
        {
            WeaverPropPair wpp = WeaverUtil.GetPropertyAttribute(pProp);
            WeaverTitanPropertyAttribute att = WeaverTitanUtil.GetAndVerifyTitanPropertyAttribute(wpp);
            Type pt = wpp.Info.PropertyType;

            AddCustom("makeType()");
            AddCustom("dataType(" + WeaverTitanPropertyAttribute.GetTitanTypeName(pt) + ".class)");
            AddCustom("name(" + Path.Query.AddParam(new WeaverQueryVal(att.DbName)) + ")");
            AddCustom("unique(OUT)");             //WeaverConfig enforces unique property DbNames

            if (pGroupVar != null)
            {
                AddCustom("group(" + pGroupVar.Name + ")");
            }

            if (att.TitanIndex)
            {
                AddCustom("indexed(" + pElement + ".class)");
            }

            if (att.TitanElasticIndex)
            {
                AddCustom("indexed('search'," + pElement + ".class)");
            }

            return(AddCustom("makePropertyKey()"));
        }
예제 #3
0
        /*--------------------------------------------------------------------------------------------*/
        public IWeaverTransaction Finish(IWeaverVarAlias pFinalOutput = null)
        {
            EnsureUnfinished();

            Script = "";
            Params = new Dictionary <string, IWeaverQueryVal>();

            const string end = @"(?=$|[^\d])";

            foreach (IWeaverQuery wq in Queries)
            {
                string s = wq.Script + "";
                Dictionary <string, IWeaverQueryVal> pars = wq.Params;

                foreach (string key in pars.Keys)
                {
                    string newKey = "_TP" + Params.Keys.Count;
                    s = Regex.Replace(s, key + end, newKey);
                    Params.Add(newKey, pars[key]);
                }

                Script += s;
            }

            if (pFinalOutput != null)
            {
                Script += pFinalOutput.Name + ";";
            }

            return(this);
        }
예제 #4
0
        /*--------------------------------------------------------------------------------------------*/
        private static void AddEdge <TEdge>(ICreateOperationBuilder pCreCtx, IWeaverVarAlias pFromVar,
                                            TEdge pEdge, IWeaverVarAlias pToVar) where TEdge : IWeaverEdge
        {
            IWeaverQuery q = Weave.Inst.Graph.AddEdge(pFromVar, pEdge, pToVar);

            pCreCtx.AddQuery(q, true);
            pCreCtx.SetupLatestCommand(true);
        }
예제 #5
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void AddVertex <T>(T pVertex, out IWeaverVarAlias <T> pNewVertexVar) where T : IVertex
        {
            IWeaverQuery q = Weave.Inst.Graph.AddVertex(pVertex);

            q = WeaverQuery.StoreResultAsVar(GetNextVarName(), q, out pNewVertexVar);
            Transaction.AddQuery(q);
            RegisterVarWithTxBuilder(pNewVertexVar);
        }
예제 #6
0
 /*--------------------------------------------------------------------------------------------*/
 private void VerifyVar(IWeaverVarAlias pVar)
 {
     if (pVar == null || !vVarHash.Contains(pVar.Name))
     {
         throw new Exception("No matching IWeaverVarAlias found with name '" +
                             (pVar == null ? "<NULL>" : pVar.Name) + "'.");
     }
 }
예제 #7
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private static void AddVertex <T>(ICreateOperationBuilder pCreCtx, T pVertex,
                                          out IWeaverVarAlias <T> pAlias) where T : Vertex, new()
        {
            IWeaverQuery q = Weave.Inst.Graph.AddVertex(pVertex);

            q = WeaverQuery.StoreResultAsVar(pCreCtx.GetNextAliasName(), q, out pAlias);
            pCreCtx.AddQuery(q, true);
            pCreCtx.SetupLatestCommand();
        }
예제 #8
0
        //Demonstrating some traversals shown here:
        //https://github.com/thinkaurelius/titan/wiki/Getting-Started

        //See unit tests in Weaver.Test.WeavExamples.TTraversal


        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public static IWeaverQuery GetCharacterByName <T>(string pName, string pVarName,
                                                          out IWeaverVarAlias <T> pCharVar) where T : Character, new()
        {
            IWeaverQuery q = Weave.Inst.Graph
                             .V.ExactIndex <T>(x => x.Name, pName).Next()
                             .ToQuery();

            return(WeaverQuery.StoreResultAsVar(pVarName, q, out pCharVar));
        }
예제 #9
0
        /*--------------------------------------------------------------------------------------------*/
        public void GetVertexByDatabaseId <T>(T pVertex, out IWeaverVarAlias <T> pVertexVar,
                                              string pVarName = null) where T : IVertex, new()
        {
            IWeaverQuery q       = Weave.Inst.Graph.V.Id <T>(pVertex.Id).ToQuery();
            string       varName = (pVarName ?? GetNextVarName());

            q = WeaverQuery.StoreResultAsVar(varName, q, out pVertexVar);
            Transaction.AddQuery(q);
            RegisterVarWithTxBuilder(pVertexVar);
        }
예제 #10
0
        /*--------------------------------------------------------------------------------------------*/
        public void AddEdge <TEdge>(IWeaverVarAlias pFromVar, TEdge pEdge, IWeaverVarAlias pToVar)
            where TEdge : IWeaverEdge, new()
        {
            VerifyVar(pFromVar);
            VerifyVar(pToVar);

            IWeaverQuery q = Weave.Inst.Graph.AddEdge(pFromVar, pEdge, pToVar);

            Transaction.AddQuery(q);
        }
예제 #11
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddFactorEdges(IWeaverVarAlias <Factor> pAlias)
 {
     AddVertexEdges(new WeaverVarAlias <Vertex>(pAlias.Name));
     Tasks.AddFactorCreatedByMember(Build, NewDom, NewCre, pAlias);
     Tasks.AddFactorDescriptorRefinesPrimaryWithArtifact(Build, NewDom, NewCre, pAlias);
     Tasks.AddFactorDescriptorRefinesRelatedWithArtifact(Build, NewDom, NewCre, pAlias);
     Tasks.AddFactorDescriptorRefinesTypeWithArtifact(Build, NewDom, NewCre, pAlias);
     Tasks.AddFactorUsesPrimaryArtifact(Build, NewDom, NewCre, pAlias);
     Tasks.AddFactorUsesRelatedArtifact(Build, NewDom, NewCre, pAlias);
     Tasks.AddFactorVectorUsesAxisArtifact(Build, NewDom, NewCre, pAlias);
 }
예제 #12
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        private static IWeaverVarAlias <TTo> AddEdge <TFrom, TEdge, TTo>(ICreateOperationBuilder pCreCtx,
                                                                         IWeaverVarAlias <TFrom> pFromVar, long pToVertexId)
            where TFrom : IVertex, new()
            where TTo : Vertex, new()
            where TEdge : IWeaverEdge <TFrom, TTo>, new()
        {
            IWeaverVarAlias <TTo> toVar = VerifyVertex <TTo>(pCreCtx, pToVertexId);

            AddEdge(pCreCtx, pFromVar, new TEdge(), toVar);
            return(toVar);
        }
예제 #13
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void GetVertex <T>(long pVertexId, out IWeaverVarAlias <T> pVertexVar)
            where T : Vertex, new()
        {
            IWeaverQuery q = Weave.Inst.Graph.V
                             .ExactIndex <T>((x => x.VertexId), pVertexId).Next()
                             .ToQuery();

            q = WeaverQuery.StoreResultAsVar(GetNextVarName(), q, out pVertexVar);
            Transaction.AddQuery(q);
            RegisterVarWithTxBuilder(pVertexVar);
        }
예제 #14
0
 /*--------------------------------------------------------------------------------------------*/
 private static void AddReverseEdge <TFrom, TEdge, TTo>(ICreateOperationBuilder pCreCtx,
                                                        IWeaverVarAlias <TFrom> pFromVar, TEdge pEdge, IWeaverVarAlias <TTo> pToVar)
     where TFrom : IVertex, new()
     where TTo : IVertex, new()
     where TEdge : IWeaverEdge <TFrom, TTo>
 {
     if (pFromVar != null)
     {
         AddEdge(pCreCtx, pFromVar, pEdge, pToVar);
     }
 }
예제 #15
0
        /*--------------------------------------------------------------------------------------------*/
        public T FromVar <T>(IWeaverVarAlias <T> pAlias) where T : IWeaverElement, new()
        {
            var sc = new WeaverStepCustom(pAlias.Name);

            var path = new WeaverPath(Config, new WeaverQuery());

            path.AddItem(sc);

            return(new T {
                Path = path
            });
        }
예제 #16
0
        /*--------------------------------------------------------------------------------------------*/
        private static IWeaverVarAlias <TTo> AddEdge <TFrom, TEdge, TTo>(ICreateOperationBuilder pCreCtx,
                                                                         IWeaverVarAlias <TFrom> pFromVar, long?pToVertexId)
            where TFrom : IVertex, new()
            where TTo : Vertex, new()
            where TEdge : IWeaverEdge <TFrom, TTo>, new()
        {
            if (pToVertexId == null)
            {
                return(null);
            }

            return(AddEdge <TFrom, TEdge, TTo>(pCreCtx, pFromVar, (long)pToVertexId));
        }
예제 #17
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public static IWeaverQuery InitListVar(string pName, IList <IWeaverVarAlias> pVars,
                                               out IWeaverVarAlias pVar)
        {
            pVar = new WeaverVarAlias(pName);
            string list = "";

            foreach (IWeaverVarAlias var in pVars)
            {
                list += (list == "" ? "" : ",") + var.Name;
            }

            var q = new WeaverQuery();

            q.FinalizeQuery(pVar.Name + "=[" + list + "]");
            return(q);
        }
예제 #18
0
        /*--------------------------------------------------------------------------------------------*/
        public IWeaverQuery AddEdgeVci <TEdge>(IWeaverVarAlias pOutVertexVar, TEdge pEdge,
                                               IWeaverVarAlias pInVertexVar) where TEdge : IWeaverEdge
        {
            if (!pEdge.IsValidOutVertexType(pOutVertexVar.VarType))
            {
                throw new WeaverException("Invalid Out VarType: '" + pOutVertexVar.VarType.Name +
                                          "', expected '" + pEdge.OutVertexType.Name + "'.");
            }

            if (!pEdge.IsValidInVertexType(pInVertexVar.VarType))
            {
                throw new WeaverException("Invalid In VarType: '" + pInVertexVar.VarType.Name +
                                          "', expected '" + pEdge.InVertexType.Name + "'.");
            }

            return(FinishEdgeVci(pEdge, pOutVertexVar.Name, pInVertexVar.Name, ""));
        }
예제 #19
0
        /*--------------------------------------------------------------------------------------------*/
        private static IWeaverQuery StoreResultInner(IWeaverQuery pQuery, IWeaverVarAlias pVarAlias)
        {
            if (!pQuery.IsFinalized)
            {
                throw new WeaverException("Query must be finalized.");
            }

            if (pQuery.ResultVar != null)
            {
                throw new WeaverException(
                          "Query result already stored as '" + pQuery.ResultVar.Name + "'.");
            }

            var s = pQuery.Script;

            var q = new WeaverQuery();

            q.ResultVar = pVarAlias;
            q.Params    = pQuery.Params;
            q.FinalizeQuery(pVarAlias.Name + "=" + s.Substring(0, s.Length - 1));
            return(q);
        }
예제 #20
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddEmailEdges(IWeaverVarAlias <Email> pAlias)
 {
     AddVertexEdges(new WeaverVarAlias <Vertex>(pAlias.Name));
     Tasks.AddEmailUsedByArtifact(Build, NewDom, NewCre, pAlias);
 }
예제 #21
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddClassEdges(IWeaverVarAlias <Class> pAlias)
 {
     AddArtifactEdges(new WeaverVarAlias <Artifact>(pAlias.Name));
 }
예제 #22
0
 /*--------------------------------------------------------------------------------------------*/
 protected override void AddVertex(out IWeaverVarAlias <Class> pAlias)
 {
     Tasks.AddClass(Build, NewDom, out pAlias);
 }
예제 #23
0
 ////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 protected void AddArtifactEdges(IWeaverVarAlias <Artifact> pAlias)
 {
     AddVertexEdges(new WeaverVarAlias <Vertex>(pAlias.Name));
     Tasks.AddArtifactCreatedByMember(Build, NewDom, NewCre, pAlias);
 }
예제 #24
0
 ////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 protected void AddVertexEdges(IWeaverVarAlias <Vertex> pAlias)
 {
 }
예제 #25
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddAppEdges(IWeaverVarAlias <App> pAlias)
 {
     AddArtifactEdges(new WeaverVarAlias <Artifact>(pAlias.Name));
 }
예제 #26
0
 /*--------------------------------------------------------------------------------------------*/
 protected override void AddVertex(out IWeaverVarAlias <User> pAlias)
 {
     Tasks.AddUser(Build, NewDom, out pAlias);
 }
예제 #27
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddOauthAccessEdges(IWeaverVarAlias <OauthAccess> pAlias)
 {
     AddVertexEdges(new WeaverVarAlias <Vertex>(pAlias.Name));
     Tasks.AddOauthAccessAuthenticatesMember(Build, NewDom, NewCre, pAlias);
 }
예제 #28
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddMemberEdges(IWeaverVarAlias <Member> pAlias)
 {
     AddVertexEdges(new WeaverVarAlias <Vertex>(pAlias.Name));
     Tasks.AddMemberDefinedByApp(Build, NewDom, NewCre, pAlias);
     Tasks.AddMemberDefinedByUser(Build, NewDom, NewCre, pAlias);
 }
예제 #29
0
 /*--------------------------------------------------------------------------------------------*/
 private void AddInstanceEdges(IWeaverVarAlias <Instance> pAlias)
 {
     AddArtifactEdges(new WeaverVarAlias <Artifact>(pAlias.Name));
 }
예제 #30
0
 /*--------------------------------------------------------------------------------------------*/
 protected override void AddVertex(out IWeaverVarAlias <Instance> pAlias)
 {
     Tasks.AddInstance(Build, NewDom, out pAlias);
 }