コード例 #1
0
        public void Should_generate_a_non_empty_guid()
        {
            var generator = new OidGenerator();
            var oid = generator.Generate(null, null);

            Assert.IsNotNull(oid);
        }
コード例 #2
0
        public void TestInsertOfArray()
        {
            var ogen    = new OidGenerator();
            var inserts = DB.GetCollection <Album>("inserts");
            var album   = new Album {
                Title = "Deliveries After Dark", Artist = "Popa Chubby"
            };

            album.Songs = new List <Song>
            {
                new Song {
                    Title = "Let The Music Set You Free", Length = "5:15"
                },
                new Song {
                    Title = "Sally Likes to Run", Length = "4:06"
                },
                new Song {
                    Title = "Deliveries After Dark", Length = "4:17"
                },
                new Song {
                    Title = "Theme From The Godfather", Length = "3:06"
                },
                new Song {
                    Title = "Grown Man Crying Blues", Length = "8:09"
                }
            };
            inserts.Insert(album);

            var result = inserts.FindOne(new Document().Add("Songs.Title", "Deliveries After Dark"));

            Assert.IsNotNull(result);

            Assert.AreEqual(album.Songs.Count, result.Songs.Count);
        }
コード例 #3
0
        public void TestInsertOfArray()
        {
            var ogen    = new OidGenerator();
            var inserts = DB["inserts"];
            var album   = new Document();

            album["_id"]    = ogen.Generate();
            album["artist"] = "Popa Chubby";
            album["title"]  = "Deliveries After Dark";
            album["songs"]  = new[]
            {
                new Document().Add("title", "Let The Music Set You Free").Add("length", "5:15").Add("_id", ogen.Generate()),
                new Document().Add("title", "Sally Likes to Run").Add("length", "4:06").Add("_id", ogen.Generate()),
                new Document().Add("title", "Deliveries After Dark").Add("length", "4:17").Add("_id", ogen.Generate()),
                new Document().Add("title", "Theme From The Godfather").Add("length", "3:06").Add("_id", ogen.Generate()),
                new Document().Add("title", "Grown Man Crying Blues").Add("length", "8:09").Add("_id", ogen.Generate()),
            };
            inserts.Insert(album);

            var result = inserts.FindOne(new Document().Add("songs.title", "Deliveries After Dark"));

            Assert.IsNotNull(result);

            Assert.AreEqual(album.ToString(), result.ToString());
        }
コード例 #4
0
        public void TestCastsToDocument()
        {
            var ogen = new OidGenerator();
            var dref = new DBRef("tests.dbrefs", ogen.Generate());
            var doc  = (Document)dref;

            Assert.AreEqual(dref.CollectionName, doc[DBRef.RefName]);
        }
コード例 #5
0
ファイル: Chunk.cs プロジェクト: kupetto/mongodb-csharp
 public static Chunk CreateNew(Oid fileId, int number, byte[] data)
 {
     OidGenerator generator = new OidGenerator();
     Chunk chunk = new Chunk();
     chunk.Oid = generator.Generate();
     chunk.Data = data;
     chunk.FileID = fileId;
     chunk.Number = number;
     return chunk;
 }
コード例 #6
0
    private static OidGenerator FindOrCreateOidGenerator(Type seqType, Session generatorSession)
    {
        OidGenerator generator = generatorSession.FindObject <OidGenerator>(
            new GroupOperator(new BinaryOperator("Type", seqType.FullName))
            );

        if (generator == null)
        {
            generator        = new OidGenerator(generatorSession);
            generator.Type   = seqType.FullName;
            generator.Prefix = "";
        }
        return(generator);
    }
コード例 #7
0
        public void TestGenerate()
        {
            OidGenerator ogen = new OidGenerator();
            Oid          oid  = ogen.Generate();

            String hex = BitConverter.ToString(oid.ToByteArray()).Replace("-", "");

            Assert.IsTrue(hex.EndsWith("000001"), "Increment didn't start with 1.");

            oid = ogen.Generate();
            hex = BitConverter.ToString(oid.ToByteArray()).Replace("-", "");
            Assert.IsTrue(hex.EndsWith("000002"), "Next increment should have been 2");


            DateTime created = oid.Created;
            DateTime now     = DateTime.UtcNow;

            Console.Out.WriteLine(oid.Created);
            Assert.AreEqual(now.Year, created.Year);
            Assert.AreEqual(now.Month, created.Month);
        }
コード例 #8
0
    public static string Generate(IDataLayer idGeneratorDataLayer, Type seqType, bool save, string code)
    {
        //OidGenerator generator = null;
        string  strNeedTrim      = "";
        string  prefixcode       = "";
        Session generatorSession = new Session(idGeneratorDataLayer);
        var     csc = generatorSession.FindObject <CodeSequenceConfig>(
            new BinaryOperator("Type", seqType)
            );

        if (csc != null)
        {
            strNeedTrim  = csc.Prefix != null ? csc.Prefix : "";
            strNeedTrim += csc.DelimiterFirst != null ? csc.DelimiterFirst : "";
            switch (csc.PrefixPartType)
            {
            case PrefixPartType.String: break;

            case PrefixPartType.IssueDate:
                var    d   = DateTime.Now;
                string dmy = d.Day + "/" + d.Month + "/" + d.Year;
                strNeedTrim += dmy;
                strNeedTrim  = NNE(csc.DelimiterSecond) == true ? strNeedTrim + csc.DelimiterSecond : strNeedTrim;
                break;

            default: break;
            }
        }
        else
        {
            csc      = new CodeSequenceConfig(generatorSession);
            csc.Type = seqType;
            csc.Save();
        }

        code = code != null?code.Trim() : code;

        //case 1: user nhap ma -> ko tao ma tu sinh
        if (NNE(code))
        {
            string isNumber;
            int    codeUserNhapKetThucVoi;
            if (strNeedTrim != "")
            {
                var match = Regex.Match(code, strNeedTrim);
                //Regex r = new Regex(strNeedTrim, RegexOptions.IgnoreCase);
                //var match = r.Match(code);
                if (match.Success)
                {
                    isNumber = code.Replace(strNeedTrim, "");
                    if (isNumberic(isNumber, out codeUserNhapKetThucVoi))    //neu la kieu so // user nhap Duc|9/8/1985|9
                    {
                        CriteriaOperator cr = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), codeUserNhapKetThucVoi.ToString());
                        var a = generatorSession.FindObject(seqType, cr);
                        if (a != null)
                        {
                            //generator.Save();
                            //throw new UserFriendlyException("Code Exist!");
                            while (a != null)
                            {
                                generator.Oid++;
                                var mr = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), generator.Oid.ToString());
                                a = generatorSession.FindObject(seqType, mr);
                            }
                        }

                        CriteriaOperator cre = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), generator.Oid.ToString());
                        var aa = generatorSession.FindObject(seqType, cre);    //new BinaryOperator("Code", generator.Oid,BinaryOperatorType.Equal)
                        while (aa != null)
                        {
                            generator.Oid++;
                            cre = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), generator.Oid.ToString());
                            aa  = generatorSession.FindObject(seqType, cre);
                        }
                        generator.Save();
                        code = strNeedTrim + string.Format("{0:D" + csc.ZeroDisplay + "}", generator.Oid);
                        return(code);
                    }
                }
            }
            CriteriaOperator criteriaEndWith = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), code);
            var tt = generatorSession.FindObject(seqType, criteriaEndWith);
            if (tt != null)
            {
                throw new UserFriendlyException("Code Exist!");
            }
            return(code);
        }
        else
        {
            for (int attempt = 1; ; ++attempt)
            {
                try
                {
                    string prefixcodeformat = strNeedTrim + string.Format("{0:D" + csc.ZeroDisplay + "}", 0);
                    generator = generatorSession.FindObject <OidGenerator>(
                        CriteriaOperator.And(
                            new BinaryOperator("Type", seqType.FullName)
                            )
                        );
                    if (generator == null)
                    {
                        generator        = new OidGenerator(generatorSession);
                        generator.Type   = seqType.FullName;
                        generator.Prefix = prefixcodeformat;
                        generator.Oid    = 1;
                    }
                    else
                    {
                        generator.Oid++;
                    }
                    if (save)
                    {
                        CriteriaOperator criteriaEndWith = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), generator.Oid.ToString());
                        var tt = generatorSession.FindObject(seqType, criteriaEndWith);    //new BinaryOperator("Code", generator.Oid,BinaryOperatorType.Equal)
                        while (tt != null)
                        {
                            generator.Oid++;
                            criteriaEndWith = new FunctionOperator(FunctionOperatorType.EndsWith, new OperandProperty("Code"), generator.Oid.ToString());
                            tt = generatorSession.FindObject(seqType, criteriaEndWith);
                        }
                        generator.Save();
                    }
                    prefixcode = strNeedTrim + string.Format("{0:D" + csc.ZeroDisplay + "}", generator.Oid);
                    return(strNeedTrim + string.Format("{0:D" + csc.ZeroDisplay + "}", generator.Oid));
                }
                catch (LockingException)
                {
                    if (attempt >= MaxIdGenerationAttemptsCounter)
                    {
                        throw;
                    }
                }
            }
        }
    }