コード例 #1
0
        private void AddParentToChildJoins(DbJoin arg)
        {
            TableKey childTable = arg.Destination;
            TableKey parent     = null;
            Dictionary <int, string> localGeneratedJoins = new Dictionary <int, string> ( );


            while ((parent = childTable.Parent) != null && (arg.Source != childTable))
            {
                DbJoin join = new DbJoin(parent, childTable);

                if (!_generatedJoins.ContainsKey(join))
                {
                    var joins = _cachedJoins.GetOrAdd(join, GenerateAndAddJoinWithChild);
                    localGeneratedJoins.Add(join, joins.First( ));
                }

                childTable = parent;
            }

            if (arg.Source == childTable)
            {
                Merge(_generatedJoins, localGeneratedJoins);
            }
        }
コード例 #2
0
ファイル: LmdbLightClient.cs プロジェクト: cotyar/braindump
        public void TryCopy(IEnumerable <KeyValuePair <string, string> > keyCopies, DateTimeOffset expiry, out HashSet <string> fromKeysWhichDidNotExist,
                            out HashSet <string> toKeysWhichAlreadyExisted, AvailabilityLevel requiredAvailabilityLevel = AvailabilityLevel.SavedToDisk)
        {
            var(notExists1, existed1) = _lmdb.WriteAsync(txn =>
            {
                var notExists = new List <string>();
                var existed   = new List <string>();

                foreach (var fromTo in keyCopies)
                {
                    var from = new TableKey(fromTo.Key);
                    var to   = new TableKey(fromTo.Value);

                    var val = txn.TryGet(_kvTable, from);
                    if (!val.HasValue)
                    {
                        notExists.Add(fromTo.Key);
                    }
                    else if (txn.ContainsKey(_kvTable, to))
                    {
                        existed.Add(fromTo.Value);
                    }
                    else
                    {
                        txn.Add(_kvTable, to, val.Value);
                    }
                }

                return(notExists, existed);
            }, false).Result;

            fromKeysWhichDidNotExist  = new HashSet <string>(notExists1);
            toKeysWhichAlreadyExisted = new HashSet <string>(existed1);
        }
コード例 #3
0
        public SingleResultQueryCommand <InstanceMetadata> CreateGetMetadataCommand(IObjectId instance)
        {
            TableKey            studyTable     = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            TableKey            seriesTable    = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.SeriesTableName);
            TableKey            instanceTable  = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.ObjectInstanceTableName);
            QueryBuilder        queryBuilder   = CreateQueryBuilder( );
            SingleValueMatching uidMatching    = new SingleValueMatching( );
            ColumnInfo          metadataColumn = SchemaProvider.GetColumn(instanceTable.Name,
                                                                          StorageDbSchemaProvider.MetadataTable.MetadataColumn);

            queryBuilder.ProcessColumn(instanceTable, seriesTable.ModelKeyColumns[0], uidMatching, new string[] { instance.SeriesInstanceUID });
            queryBuilder.ProcessColumn(instanceTable, studyTable.ModelKeyColumns[0], uidMatching, new string[] { instance.StudyInstanceUID });
            queryBuilder.ProcessColumn(instanceTable, instanceTable.ModelKeyColumns[0], uidMatching, new string[] { instance.SOPInstanceUID });
            queryBuilder.ProcessColumn(instanceTable, metadataColumn);

            return(new SingleResultQueryCommand <InstanceMetadata> (CreateCommand(queryBuilder.GetQueryText(instanceTable)),
                                                                    instanceTable,
                                                                    metadataColumn.ToString( ),
                                                                    CreateMetadata));

            //IDbCommand command  = CreateCommand ( ) ;
            //var        sopParam = CreateParameter ( "@" + DB.Schema.StorageDbSchemaProvider.MetadataTable.SopInstanceColumn, instance.SOPInstanceUID ) ;


            // command.CommandText = string.Format ( "SELECT {0} FROM {1} WHERE {2}=@{2}",
            //                                      DB.Schema.StorageDbSchemaProvider.MetadataTable.MetadataColumn,
            //                                      DB.Schema.StorageDbSchemaProvider.MetadataTable.TableName,
            //                                      DB.Schema.StorageDbSchemaProvider.MetadataTable.SopInstanceColumn ) ;

            //command.Parameters.Add ( sopParam );

            //SetConnectionIfNull ( command ) ;

            //return command ;
        }
コード例 #4
0
        public ObjectHandle CreateObject(TableKey tableKey)
        {
            var result = NativeMethods.create_object(this, tableKey, out NativeException ex);

            ex.ThrowIfNecessary();
            return(new ObjectHandle(this, result));
        }
コード例 #5
0
        public virtual void Sort(IQueryOptions options, TableKey queryLeveTable)
        {
            IEnumerable <ColumnInfo> orderByColumns = null;


            Direction = SortingDirection.ASC;

            if (queryLeveTable == StorageDbSchemaProvider.StudyTableName)
            {
                var studyTable = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);

                orderByColumns = new ColumnInfo [] { studyTable.KeyColumn };

                Direction = SortingDirection.DESC;
            }
            else if (queryLeveTable == StorageDbSchemaProvider.SeriesTableName)
            {
                orderByColumns = SchemaProvider.GetColumnInfo((uint)DicomTag.SeriesNumber);
            }

            if (queryLeveTable == StorageDbSchemaProvider.ObjectInstanceTableName)
            {
                orderByColumns = SchemaProvider.GetColumnInfo((uint)DicomTag.InstanceNumber);
            }


            if (null != orderByColumns)
            {
                SortBy = string.Join(",", orderByColumns.Select(column => (string)column));
            }
        }
コード例 #6
0
ファイル: TestLock.cs プロジェクト: e2wugui/zeze
        public void Test1()
        {
            Locks locks = Locks.Instance;

            TableKey tk1 = new TableKey(1, 1);
            TableKey tk2 = new TableKey(1, 1);

            Lockey lock1 = new Lockey(tk1);
            Lockey lock2 = new Lockey(tk2);

            Assert.AreEqual(lock1, lock2);

            Lockey lock1ref = locks.Get(lock1);

            Assert.IsTrue(lock1ref == lock1); // first Get. self

            Lockey lock2ref = locks.Get(lock2);

            Assert.IsTrue(lock2ref == lock1); // second Get. the exist

            TableKey tk3      = new TableKey(1, 2);
            Lockey   lock3    = new Lockey(tk3);
            Lockey   lock3ref = locks.Get(lock3);

            Assert.IsTrue(lock3ref == lock3);
            Assert.IsFalse(lock3ref == lock1);
        }
コード例 #7
0
        public DbJoin(TableKey source, TableKey destination)
        {
            Source      = source;
            Destination = destination;

            _key = GenerateKey(source, destination);
        }
コード例 #8
0
        /*
         * {0} = @NewPatientKey
         * {1} = [PatientKey]
         * {2} = [Patient]
         * {3} = [PatientId]
         * {4} = @PatientId
         * {5} = columns
         * {6} = values
         */

        public static string GetInsertIntoTable
        (
            TableKey table
        )
        {
            IList <ColumnInfo> whereColumns = table.ModelKeyColumns;

            string [] conditions         = new string [whereColumns.Count];
            string    newPrimaryParam    = "@New" + table.KeyColumn.Name;
            string    primaryColumn      = wrap(table.KeyColumn.Name);
            string    tableName          = wrap(table.Name);
            string    whereColumnsString = "";
            string    columns            = "{0}";
            string    values             = "{1}";

            if (table.ForeignColumn != null)
            {
                columns = table.ForeignColumn.Name + ", " + columns;
                values  = "@New" + table.Parent.KeyColumn.Name + ", " + values;
            }

            for (int index = 0; index < whereColumns.Count; index++)
            {
                ColumnInfo column = whereColumns[index];
                conditions [index] = wrap(column.Name) + " = @" + column.Name;
            }

            whereColumnsString = string.Join(" AND ", conditions);

            return(string.Format(InsertTableFormatted, newPrimaryParam, primaryColumn, tableName, whereColumnsString, columns, values));
        }
コード例 #9
0
ファイル: Table.cs プロジェクト: manhnguyenv/Easy.Storage
        private Table(TableKey key, string tableName)
        {
            Dialect   = key.Dialect;
            ModelType = key.Type;

            if (tableName.IsNullOrEmpty())
            {
                tableName = GetModelName(ModelType);
            }

            Name = tableName.GetAsEscapedSQLName();

            var props = key.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            PropertyToColumns      = GetPropertiesToColumnsMappings(props, out HashSet <string> ignoredProperties);
            PropertyNamesToColumns = PropertyToColumns.ToDictionary(kv => kv.Key.Name, kv => kv.Value);
            IgnoredProperties      = ignoredProperties;

            Select = Dialect.GetSelectQuery(this);
            Delete = Dialect.GetDeleteQuery(this);

            GetKeyProperty(props, out IdentityColumn, out HasIdentityColumn);

            UpdateAll = Dialect.GetUpdateQuery(this, true);
            InsertAll = Dialect.GetInsertQuery(this, true);

            if (HasIdentityColumn)
            {
                UpdateIdentity = Dialect.GetUpdateQuery(this, false);
                InsertIdentity = Dialect.GetInsertQuery(this, false);
            }
        }
コード例 #10
0
 public Metadata(TableKey tableKey, IRealmObjectHelper helper, IDictionary <string, IntPtr> propertyIndices, ObjectSchema schema)
 {
     TableKey        = tableKey;
     Helper          = helper;
     PropertyIndices = new ReadOnlyDictionary <string, IntPtr>(propertyIndices);
     Schema          = schema;
 }
コード例 #11
0
        public override string ObjectName(Table table, TableKey fk = null)
        {
            string name = fk == null
                ? string.Join("And", table.PrimaryKey.Select(c => ToTitleCase(c.ColumnName)))
                : string.Join("And", fk.Select(c => ToTitleCase(c.ColumnName)));

            return($"[{table.Schema}].[{table.TableName}_GetByListOf{name}]");
        }
コード例 #12
0
ファイル: Table.cs プロジェクト: manhnguyenv/Easy.Storage
        internal static Table MakeOrGet <T>(Dialect dialect, string name)
        {
            Ensure.NotNull(dialect, nameof(dialect));

            var key = new TableKey(typeof(T), dialect, name.GetHashCode());

            return(Cache.GetOrAdd(key, k => new Table(k, name)));
        }
コード例 #13
0
ファイル: KvMetadataTable.cs プロジェクト: cotyar/braindump
        public KvMetadata TryGet(AbstractTransaction txn, TableKey key)
        {
            var ret = txn.TryGet(_table, key);

            return(ret.HasValue
                ? FromTableValue(ret.Value)
                : null);
        }
コード例 #14
0
        public ReplicaStatusTable(LightningPersistence lmdb, string tableName, string replicaId)
        {
            _lmdb      = lmdb;
            _replicaId = replicaId;
            _table     = _lmdb.OpenTable(tableName);

            _clockKey    = new TableKey(KEY_CLOCK);
            _countersKey = new TableKey(KEY_COUNTERS);
        }
コード例 #15
0
 public override bool CanPaginate
 (
     QueryBuilder queryBuilder,
     IQueryOptions options,
     TableKey queryLeveTable
 )
 {
     return(null != options && options.Limit > 0);
 }
コード例 #16
0
 private string GetJoinWithChild(TableKey child)
 {
     return(string.Format(SqlQueries.Joins.OuterJoinFormattedTemplate,
                          child.Name,
                          child.Parent.Name,
                          child.Parent.KeyColumn.Name,
                          child.ForeignColumn.Name));
     //child.Name + _aliasGenerator.Next ( 1000 ) ) ;
 }
コード例 #17
0
        protected virtual QueryBuilder BuildQuery
        (
            IEnumerable <IMatchingCondition> conditions,
            IQueryOptions options,
            TableKey queryLeveTable
        )
        {
            QueryBuilder queryBuilder = CreateQueryBuilder( );


            if (null != conditions && conditions.Count( ) > 0)
            {
                foreach (var condition in conditions)
                {
                    if (condition.VR == fo.DicomVR.PN)
                    {
                        List <PersonNameData> pnValues = new List <PersonNameData> ( );


                        pnValues = condition.GetPNValues( );

                        foreach (var values in pnValues)
                        {
                            int           index        = -1;
                            string[]      stringValues = values.ToArray( );
                            List <string> pnConditions = new List <string> ( );

                            foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                            {
                                var columnValues = new string [] { stringValues[++index] };

                                queryBuilder.ProcessColumn(queryLeveTable, column, condition, columnValues);
                            }
                        }
                    }
                    else
                    {
                        IList <string> columnValues = GetValues(condition);

                        foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                        {
                            queryBuilder.ProcessColumn(queryLeveTable, column, condition, columnValues);
                        }
                    }
                }
            }
            else
            {
                foreach (var column in SchemaProvider.GetTableInfo(queryLeveTable).Columns)
                {
                    queryBuilder.ProcessColumn(queryLeveTable, column);
                }
            }

            return(queryBuilder);
        }
コード例 #18
0
 /// <summary>
 /// Creates the table referred by this reference.
 /// </summary>
 /// <param name="key">The definition of the key schema for this table. Must contain at least a primary key.</param>
 /// <param name="provisionType">Type of provisioning (number of read/write operations per second).</param>
 /// <param name="provisionLoad">Option of provision load (how the number of operations are divided between the read and write throughput).</param>
 /// <returns>This table reference.</returns>
 public UnityTask <StorageResponse <TableMetadata> > Create(TableKey key, ProvisionType provisionType, ProvisionLoad provisionLoad)
 {
     return(_repository.CreateTable(new TableMetadata
     {
         provisionLoad = provisionLoad,
         provisionType = provisionType,
         name = TableName,
         key = key,
     }));
 }
コード例 #19
0
ファイル: Class.cs プロジェクト: suzhongmou/bookresources
        static void WriteActionTableValue(Dictionary <TableKey, string> ACTION, int I, char J, string action)
        {
            TableKey Key = MakeTableKey(I, J);

            if (ACTION.ContainsKey(Key) && !ACTION[Key].Equals(action))
            {
                throw new Exception(); // not an LR(1) kind
            }
            ACTION[Key] = action;
        }
コード例 #20
0
        protected virtual QueryBuilder BuildQuery
        (
            IEnumerable <IMatchingCondition> conditions,
            IQueryOptions options,
            string queryLevel
        )
        {
            QueryBuilder queryBuilder = CreateQueryBuilder( );
            TableKey     sourceTable  = SchemaProvider.GetTableInfo(SchemaProvider.GetQueryTable(queryLevel));


            if (sourceTable == null)
            {
                throw new ArgumentException("querylevel not supported");
            }

            if (null != conditions)
            {
                foreach (var condition in conditions)
                {
                    if (condition.VR == fo.DicomVR.PN)
                    {
                        List <PersonNameData> pnValues = new List <PersonNameData> ( );


                        pnValues = condition.GetPNValues( );

                        foreach (var values in pnValues)
                        {
                            int           index        = -1;
                            string[]      stringValues = values.ToArray( );
                            List <string> pnConditions = new List <string> ( );

                            foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                            {
                                var columnValues = new string [] { stringValues[++index] };

                                queryBuilder.ProcessColumn(sourceTable, column, condition, columnValues);
                            }
                        }
                    }
                    else
                    {
                        IList <string> columnValues = GetValues(condition);

                        foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                        {
                            queryBuilder.ProcessColumn(sourceTable, column, condition, columnValues);
                        }
                    }
                }
            }

            return(queryBuilder);
        }
コード例 #21
0
ファイル: GetProcGenerator.cs プロジェクト: shawdren/SqlGen
        public override string ObjectName(Table table, TableKey key = null)
        {
            if (key == null)
            {
                return($"[{table.Schema}].[{table.TableName}_Get]");
            }

            var name = string.Join("And", key.Select(c => c.ColumnName.ToPascalCase()));

            return($"[{table.Schema}].[{table.TableName}_GetBy{name}]");
        }
コード例 #22
0
        public void AddJoins(TableKey source, TableKey destination)
        {
            if (source == destination)
            {
                return;
            }

            DbJoin join = new DbJoin(source, destination);

            CreateJoin(join);
        }
コード例 #23
0
 /// <summary>
 /// Creates the table referred by this reference with a customized throughput.
 /// </summary>
 /// <param name="key">The definition of the key schema for this table. Must contain at least a primary key.</param>
 /// <param name="throughput">The custom provision to apply.</param>
 /// <returns>This table reference.</returns>
 public UnityTask <StorageResponse <TableMetadata> > Create(TableKey key, TableThroughput throughput)
 {
     return(_repository.CreateTable(new TableMetadata
     {
         throughput = throughput,
         provisionLoad = ProvisionLoad.Balanced,
         provisionType = ProvisionType.Custom,
         name = TableName,
         key = key,
     }));
 }
コード例 #24
0
        public virtual IDataAdapterCommand <long> CreateSelectStudyKeyCommand(IStudyId study)
        {
            TableKey     studyTable   = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            QueryBuilder queryBuilder = CreateQueryBuilder( );

            ProcessSelectStudy(study, queryBuilder, studyTable, studyTable);

            return(new SingleResultQueryCommand <long> (CreateCommand(queryBuilder.GetQueryText(studyTable)),
                                                        studyTable.Name,
                                                        studyTable.KeyColumn.Name));
        }
コード例 #25
0
        public void BuildQuery(IEnumerable <IMatchingCondition> conditions, string queryLevel)
        {
            TableKey sourceTable = base.SchemaProvider.GetTableInfo(queryLevel);


            if (sourceTable == null)
            {
                throw new ArgumentException("querylevel not supported");
            }

            if (null != conditions)
            {
                _returns    = new List <string>   ( );
                _conditions = new List <string>   ( );
                _joins      = new SqlJoinBuilder( );

                foreach (var condition in conditions)
                {
                    //string[] values = GetValues ( condition ) ;

                    if (condition.VR == DicomVr.PNvr)
                    {
                        List <PersonNameData> pnValues = new List <PersonNameData> ( );


                        pnValues = condition.GetPNValues( );

                        foreach (var values in pnValues)
                        {
                            int           index        = -1;
                            string[]      stringValues = values.ToArray( );
                            List <string> pnConditions = new List <string> ( );

                            foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                            {
                                var columnValues = new string [] { stringValues[++index] };

                                ProcessColumn(sourceTable, condition, column, columnValues);
                            }
                        }
                    }
                    else
                    {
                        IList <string> columnValues = GetValues(condition);

                        foreach (var column in SchemaProvider.GetColumnInfo(condition.KeyTag))
                        {
                            ProcessColumn(sourceTable, condition, column, columnValues);
                        }
                    }
                }
            }
        }
コード例 #26
0
ファイル: TableTypeGenerator.cs プロジェクト: shawdren/SqlGen
 public override string ObjectName(Table table, TableKey key = null)
 {
     if (key == null)
     {
         return($"[{table.Schema}].[{table.TableName}_TABLE_TYPE]");
     }
     if (key.Count() == 1)
     {
         return($"[{table.Schema}].[{key.First().ColumnName.ToUpper()}_TABLE_TYPE]");
     }
     return($"[{table.Schema}].[{key.ConstraintName.ToUpper()}_TABLE_TYPE]");
 }
コード例 #27
0
        private string GetJoinWithParent(TableKey table)
        {
            //{0}=Patient (parent/destination)
            //{1}=Study (child/source)
            //{2}=Study_PatientKey (child foriegn)
            //{3}=PatientKey (parent foriegn)

            return(string.Format(SqlQueries.Joins.JoinFormattedTemplate,
                                 table.Parent.Name,
                                 table.Name,
                                 table.ForeignColumn.Name,
                                 table.Parent.KeyColumn.Name));
        }
コード例 #28
0
ファイル: TestProcdure.cs プロジェクト: e2wugui/zeze
        public void Test1()
        {
            TableKey root = new TableKey(1, 1);
            // 特殊测试,拼凑一个record用来提供需要的信息。
            var r = new Record <long, TestBegin.MyBean>(null, 1, bean);

            bean.InitRootInfo(r.CreateRootInfoIfNeed(root), null);
            int rc = demo.App.Instance.Zeze.NewProcedure(ProcNest, "ProcNest").Call();

            Assert.IsTrue(rc == Procedure.Success);
            // 最后一个 Call,事务外,bean 已经没法访问事务支持的属性了。直接访问内部变量。
            Assert.AreEqual(bean._i, 123);
        }
コード例 #29
0
        public virtual IDataAdapterCommand <long> CreateSelectStudyKeyCommand(IStudyId study)
        {
            TableKey            studyTable   = SchemaProvider.GetTableInfo(StorageDbSchemaProvider.StudyTableName);
            QueryBuilder        queryBuilder = CreateQueryBuilder( );
            SingleValueMatching uidMatching  = new SingleValueMatching( );


            queryBuilder.ProcessColumn(studyTable, studyTable.ModelKeyColumns [0], uidMatching, new string[] { study.StudyInstanceUID });

            return(new SingleResultQueryCommand <long> (CreateCommand(queryBuilder.GetQueryText(studyTable)),
                                                        studyTable.Name,
                                                        studyTable.KeyColumn.Name));
        }
コード例 #30
0
        public double GetQValue(State state, Action currentPlayerAction, Action opposingPlayerAction)
        {
            double currentQValue;
            var    qValueTableKey = new TableKey(state, currentPlayerAction, opposingPlayerAction);

            if (!_qValues.TryGetValue(qValueTableKey, out currentQValue))
            {
                //Default Q Value is 1.0
                currentQValue = 1.0;
            }

            return(currentQValue);
        }
コード例 #31
0
ファイル: TestTableKey.cs プロジェクト: blinds52/SterlingDB
        public void TestTableKeyFunctionality()
        {
            var list = new[] {TestModel.MakeTestModel(), TestModel.MakeTestModel()};

            Func<int, TestModel> getter = i => (from t in list where t.Key.Equals(i) select t).FirstOrDefault();

            var key1 = new TableKey<TestModel, int>(list[0].Key, getter);
            var key2 = new TableKey<TestModel, int>(list[1].Key, getter);

            Assert.AreEqual(key1.Key, list[0].Key, "Key mismatch.");
            Assert.AreEqual(key2.Key, list[1].Key, "Key mismatch.");
            
            Assert.IsFalse(key1.LazyValue.IsValueCreated, "Lazy model already created.");
            var testModel1 = key1.LazyValue.Value;
            Assert.IsTrue(key1.LazyValue.IsValueCreated, "Lazy value created was not set.");
            Assert.AreSame(list[0], testModel1, "First key returned invalid instance.");
            Assert.AreSame(list[1], key2.LazyValue.Value, "Second key return invalid instance.");
        }
コード例 #32
0
ファイル: BTreeUtils.cs プロジェクト: Threadnaught/CDS
 public static TableData ReadFromTable(TableKey k)
 {
     return TableData.ReconstructFromData(ReadFromTableRaw(k), k.Table);
 }
コード例 #33
0
ファイル: BTreeUtils.cs プロジェクト: Threadnaught/CDS
 static byte[] ReadFromTableRaw(TableKey k)
 {
     return table[k];
 }
コード例 #34
0
ファイル: BTreeUtils.cs プロジェクト: Threadnaught/CDS
 static void WriteToTableRaw(TableKey k, byte[] Data)
 {
     table[k] = Data;
 }
コード例 #35
0
ファイル: BTreeUtils.cs プロジェクト: Threadnaught/CDS
 public static void WriteToTable(TableKey k, TableData t)
 {
     WriteToTableRaw(k, t.GetBytes());
 }