Beispiel #1
0
        public void Create(Session session, string schema, Library.Payloads.Models.Index index, out Guid newId)
        {
            try
            {
                var persistIndex = PersistIndex.FromPayload(index);

                if (persistIndex.Id == Guid.Empty)
                {
                    persistIndex.Id = Guid.NewGuid();
                }
                if (persistIndex.Created == DateTime.MinValue)
                {
                    persistIndex.Created = DateTime.UtcNow;
                }
                if (persistIndex.Modfied == DateTime.MinValue)
                {
                    persistIndex.Modfied = DateTime.UtcNow;
                }

                using (var txRef = core.Transactions.Begin(session))
                {
                    var schemaMeta = core.Schemas.VirtualPathToMeta(txRef.Transaction, schema, LockOperation.Read);
                    if (schemaMeta == null || schemaMeta.Exists == false)
                    {
                        throw new LeafSQLSchemaDoesNotExistException(schema);
                    }

                    var indexCatalog = GetIndexCatalog(txRef.Transaction, schemaMeta, LockOperation.Write);
                    indexCatalog.Add(persistIndex);
                    core.IO.PutJson(txRef.Transaction, indexCatalog.DiskPath, indexCatalog);

                    persistIndex.DiskPath = Path.Combine(schemaMeta.DiskPath, MakeIndexFileName(index.Name));
                    core.IO.PutPBuf(txRef.Transaction, persistIndex.DiskPath, new PersistIndexPageCatalog());

                    RebuildIndex(txRef.Transaction, schemaMeta, persistIndex);

                    newId = persistIndex.Id;

                    txRef.Commit();
                }
            }
            catch (Exception ex)
            {
                core.Log.Write(String.Format("Failed to create index for process {0}.", session.ProcessId), ex);
                throw;
            }
        }
Beispiel #2
0
        static public PersistIndex FromPayload(Library.Payloads.Models.Index index)
        {
            var persistIndex = new PersistIndex()
            {
                Id       = index.Id,
                Name     = index.Name,
                Created  = index.Created,
                Modfied  = index.Modfied,
                IsUnique = index.IsUnique
            };

            foreach (var indexAttribute in index.Attributes)
            {
                persistIndex.AddAttribute(PersistIndexAttribute.FromPayload(indexAttribute));
            }

            return(persistIndex);
        }
Beispiel #3
0
        public Index ToPayload()
        {
            var result = new Library.Payloads.Models.Index()
            {
                Name     = this.Name,
                Created  = this.Created,
                Id       = this.Id,
                IsUnique = this.IsUnique,
                Modfied  = this.Modfied
            };

            foreach (var att in this.Attributes)
            {
                result.Attributes.Add(att.ToPayload());
            }

            return(result);
        }