public static void Main(String[] args) 
    { 
        Storage storage = StorageFactory.Instance.CreateStorage(); 
        storage.Open("testautoindices.dbs");
        Database db = new Database(storage);

        db.EnableAutoIndices = true;

        DateTime start = DateTime.Now;

        for (int i = 0; i < nLabels; i++) 
        { 
            RecordLabel label = new RecordLabel();
            label.name = "Label" + i;
            label.email = "contact@" + label.name + ".com";
            label.address = "Country, City, Street";
            label.phone = "+1 123-456-7890";
            db.AddRecord(label);
        }        

        for (int i = 0; i < nAlbums; i++) 
        { 
            Album album = new Album();
            album.name = "Album" + i;
            album.label = (RecordLabel)Enumerable.First(db.Select(typeof(RecordLabel), "name='Label" + (i % nLabels) + "'"));
            album.genre = "Rock";
            album.release = DateTime.Now;
            db.AddRecord(album);
            
            for (int j = 0; j < nTracksPerAlbum; j++) 
            { 
                Track track = new Track();
                track.no = j+1;
                track.name = "Track" + j;
                track.album = album;
                track.duration = 3.5f;
                db.AddRecord(track);                
            }
        }

        Console.WriteLine("Elapsed time for database initialization: " + (DateTime.Now - start));

        QueryExecutionListener listener = new QueryExecutionListener();
        storage.Listener = listener;

        Query query = db.Prepare(typeof(Track), "album.label.name=?");
        start = DateTime.Now;
        int nTracks = 0;
        for (int i = 0; i < nLabels; i++) 
        {
            query[1] = "Label" + i;
            foreach (Track t in query) 
            { 
                nTracks += 1;
            }
        }
        Console.WriteLine("Elapsed time for searching of " + nTracks + " tracks: " + (DateTime.Now - start));
        Debug.Assert(nTracks == nAlbums*nTracksPerAlbum);

        String prev = "";
        int n = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "order by name"))
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n += 1;
        }
        Debug.Assert(n == nLabels);

        prev = "";
        n = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "name like 'Label%' order by name"))
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n += 1;
        }
        Debug.Assert(n == nLabels);

        n = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "name in ('Label1', 'Label2', 'Label3')"))
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        n = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "(name = 'Label1' or name = 'Label2' or name = 'Label3') and email like 'contact@%'"))
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        Query query2 = db.Prepare(typeof(RecordLabel), "phone like '+1%' and name in ?");
        ArrayList list = new ArrayList(nLabels);
        for (int i = 0; i < nLabels; i++) 
        {
            list.Add("Label" + i);
        }
        n = 0;
        query2[1] = list;
        foreach (RecordLabel label in query2) 
        { 
            Debug.Assert(label.name == "Label" + n++);
        }
        Debug.Assert(n == nLabels);        
        
        n = 0;
        foreach (Track track in db.Select(typeof(Track), "album.label.name='Label1' or album.label.name='Label2'"))
        {
            Debug.Assert(track.album.label.name == "Label1" || track.album.label.name == "Label2");
            n += 1;
        }
        Debug.Assert(n == nAlbums*nTracksPerAlbum*2/nLabels);

        Debug.Assert(listener.nSequentialSearches == 0);
        Debug.Assert(listener.nSorts == 0);


        db.DropTable(typeof(Track));
        db.DropTable(typeof(Album));
        db.DropTable(typeof(RecordLabel));

        storage.Close();
    }
    public static void Main(String[] args) 
    { 
        Storage storage = StorageFactory.Instance.CreateStorage(); 
        storage.Open("testcodegenerator.dbs");
        Database db = new Database(storage);

        DateTime start = DateTime.Now;

        for (int i = 0; i < nLabels; i++) 
        { 
            RecordLabel label = new RecordLabel();
            label.name = "Label" + i;
            label.email = "contact@" + label.name + ".com";
            label.address = "Country, City, Street";
            label.phone = "+1 123-456-7890";
            db.AddRecord(label);
        }        

        for (int i = 0; i < nAlbums; i++) 
        { 
            Album album = new Album();
            album.name = "Album" + i;
            album.label = (RecordLabel)Enumerable.First(db.Select(typeof(RecordLabel), "name='Label" + (i % nLabels) + "'"));
            album.genre = "Rock";
            album.release = DateTime.Now;
            db.AddRecord(album);
            
            for (int j = 0; j < nTracksPerAlbum; j++) 
            { 
                Track track = new Track();
                track.no = j+1;
                track.name = "Track" + j;
                track.album = album;
                track.duration = 3.5f;
                db.AddRecord(track);                
            }
        }

        Console.WriteLine("Elapsed time for database initialization: " + (DateTime.Now - start));

        QueryExecutionListener listener = new QueryExecutionListener();
        storage.Listener = listener;

        Query trackQuery = db.CreateQuery(typeof(Track));
        CodeGenerator code = trackQuery.GetCodeGenerator();
        code.Predicate(code.And(code.Gt(code.Field("no"), 
                                        code.Literal(0)), 
                                code.Eq(code.Field(code.Field(code.Field("album"), "label"), "name"),
                                        code.Parameter(1, typeof(string)))));
        start = DateTime.Now;
        int nTracks = 0;
        for (int i = 0; i < nLabels; i++) 
        {
            trackQuery[1] = "Label" + i;
            foreach (Track t in trackQuery) 
            { 
                nTracks += 1;
            }
        }
        Console.WriteLine("Elapsed time for searching of " + nTracks + " tracks: " + (DateTime.Now - start));
        Debug.Assert(nTracks == nAlbums*nTracksPerAlbum);

        String prev = "";
        int n = 0;
        Query labelQuery = db.CreateQuery(typeof(RecordLabel));
        code = labelQuery.GetCodeGenerator();
        code.OrderBy("name");
        foreach (RecordLabel label in labelQuery)
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n += 1;
        }
        Debug.Assert(n == nLabels);

        prev = "";
        n = 0;
        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.Like(code.Field("name"), 
                                 code.Literal("Label%")));
        code.OrderBy("name");
        foreach (RecordLabel label in labelQuery)
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n += 1;
        }
        Debug.Assert(n == nLabels);

        n = 0;
        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.In(code.Field("name"), 
                               code.List(code.Literal("Label1"), code.Literal("Label2"), code.Literal("Label3"))));
        foreach (RecordLabel label in labelQuery)
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        n = 0;
        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.And(code.Or(code.Eq(code.Field("name"),
                                                code.Literal("Label1")),
                                        code.Or(code.Eq(code.Field("name"),
                                                        code.Literal("Label2")),
                                                code.Eq(code.Field("name"),
                                                        code.Literal("Label3")))),
                                code.Like(code.Field("email"),
                                          code.Literal("contact@%"))));
        foreach (RecordLabel label in labelQuery)
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.And(code.Like(code.Field("phone"),
                                          code.Literal("+1%")),
                                code.In(code.Field("name"), 
                                        code.Parameter(1, typeof(ArrayList)))));
        ArrayList list = new ArrayList(nLabels);
        for (int i = 0; i < nLabels; i++) 
        {
            list.Add("Label" + i);
        }
        n = 0;
        labelQuery[1] = list;
        foreach (RecordLabel label in labelQuery) 
        { 
            Debug.Assert(label.name == "Label" + n++);
        }
        Debug.Assert(n == nLabels);        
        
        n = 0;
        code = trackQuery.GetCodeGenerator();
        code.Predicate(code.Or(code.Eq(code.Field(code.Field(code.Field("album"), "label"), "name"),
                                       code.Literal("Label1")),
                               code.Eq(code.Field(code.Field(code.Field("album"), "label"), "name"),
                                       code.Literal("Label2"))));
        foreach (Track track in trackQuery)
        {
            Debug.Assert(track.album.label.name == "Label1" || track.album.label.name == "Label2");
            n += 1;
        }
        Debug.Assert(n == nAlbums*nTracksPerAlbum*2/nLabels);

        Debug.Assert(listener.nSequentialSearches == 0);
        Debug.Assert(listener.nSorts == 0);


        db.DropTable(typeof(Track));
        db.DropTable(typeof(Album));
        db.DropTable(typeof(RecordLabel));

        storage.Close();
    }
Ejemplo n.º 3
0
    public static void Main(String[] args)
    {
        Storage storage = StorageFactory.Instance.CreateStorage();

        storage.Open("testjsqljoin.dbs");
        Database db = new Database(storage);

        DateTime start = DateTime.Now;

        for (int i = 0; i < nLabels; i++)
        {
            RecordLabel label = new RecordLabel();
            label.name    = "Label" + i;
            label.email   = "contact@" + label.name + ".com";
            label.address = "Country, City, Street";
            label.phone   = "+1 123-456-7890";
            db.AddRecord(label);
        }

        for (int i = 0; i < nAlbums; i++)
        {
            Album album = new Album();
            album.name    = "Album" + i;
            album.label   = (RecordLabel)Enumerable.First(db.Select(typeof(RecordLabel), "name='Label" + (i % nLabels) + "'"));
            album.genre   = GENRES[i % GENRES.Length].ToLower();
            album.release = DateTime.Now;
            db.AddRecord(album);

            for (int j = 0; j < nTracksPerAlbum; j++)
            {
                Track track = new Track();
                track.no       = j + 1;
                track.name     = "Track" + j;
                track.album    = album;
                track.duration = 3.5f;
                db.AddRecord(track);
            }
        }

        Console.WriteLine("Elapsed time for database initialization: " + (DateTime.Now - start));

        QueryExecutionListener listener = new QueryExecutionListener();

        storage.Listener = listener;

        Query query = db.Prepare(typeof(Track), "album.label.name=?");

        start = DateTime.Now;
        int nTracks = 0;

        for (int i = 0; i < nLabels; i++)
        {
            query[1] = "Label" + i;
            foreach (Track t in query)
            {
                nTracks += 1;
            }
        }
        Console.WriteLine("Elapsed time for searching of " + nTracks + " tracks: " + (DateTime.Now - start));
        Debug.Assert(nTracks == nAlbums * nTracksPerAlbum);

        String prev = "";
        int    n    = 0;

        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "order by name"))
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n   += 1;
        }
        Debug.Assert(n == nLabels);

        prev = "zzz";
        n    = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "name like 'Label%' order by name desc"))
        {
            Debug.Assert(prev.CompareTo(label.name) > 0);
            prev = label.name;
            n   += 1;
        }
        Debug.Assert(n == nLabels);

        n = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "name in ('Label1', 'Label2', 'Label3')"))
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        n = 0;
        foreach (RecordLabel label in db.Select(typeof(RecordLabel), "(name = 'Label1' or name = 'Label2' or name = 'Label3') and email like 'contact@%'"))
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        Query     query2 = db.Prepare(typeof(RecordLabel), "phone like '+1%' and name in ?");
        ArrayList list   = new ArrayList(nLabels);

        for (int i = 0; i < nLabels; i++)
        {
            list.Add("Label" + i);
        }
        n         = 0;
        query2[1] = list;
        foreach (RecordLabel label in query2)
        {
            Debug.Assert(label.name == "Label" + n++);
        }
        Debug.Assert(n == nLabels);

        n = 0;
        string labelName = "Label2";

        foreach (Track track in db.Select(typeof(Track), "album.label.name='Label1' or album.label.name='Label2' order by album.label.name desc"))
        {
            Debug.Assert(track.album.label.name == labelName || track.album.label.name == (labelName = "Label1"));
            n += 1;
        }
        Debug.Assert(n == nAlbums * nTracksPerAlbum * 2 / nLabels);

        Query query3 = db.Prepare(typeof(Album), "label=?");

        n = 0;
        foreach (RecordLabel label in db.GetRecords(typeof(RecordLabel)))
        {
            query3[1] = label;
            foreach (Album album in query3)
            {
                n += 1;
            }
        }
        Debug.Assert(n == nAlbums);

        Query query4 = db.Prepare(typeof(Album), "genre in ?");

        query4[1] = GENRES;
        n         = 0;
        foreach (Album album in query4)
        {
            n += 1;
        }
        Debug.Assert(n == nAlbums);

        Debug.Assert(listener.nSequentialSearches == 0);
        Debug.Assert(listener.nSorts == 1);


        db.DropTable(typeof(Track));
        db.DropTable(typeof(Album));
        db.DropTable(typeof(RecordLabel));

        storage.Close();
    }
    public static void Main(String[] args)
    {
        Storage storage = StorageFactory.Instance.CreateStorage();

        storage.Open("testcodegenerator.dbs");
        Database db = new Database(storage);

        DateTime start = DateTime.Now;

        for (int i = 0; i < nLabels; i++)
        {
            RecordLabel label = new RecordLabel();
            label.name    = "Label" + i;
            label.email   = "contact@" + label.name + ".com";
            label.address = "Country, City, Street";
            label.phone   = "+1 123-456-7890";
            db.AddRecord(label);
        }

        for (int i = 0; i < nAlbums; i++)
        {
            Album album = new Album();
            album.name    = "Album" + i;
            album.label   = (RecordLabel)Enumerable.First(db.Select(typeof(RecordLabel), "name='Label" + (i % nLabels) + "'"));
            album.genre   = "Rock";
            album.release = DateTime.Now;
            db.AddRecord(album);

            for (int j = 0; j < nTracksPerAlbum; j++)
            {
                Track track = new Track();
                track.no       = j + 1;
                track.name     = "Track" + j;
                track.album    = album;
                track.duration = 3.5f;
                db.AddRecord(track);
            }
        }

        Console.WriteLine("Elapsed time for database initialization: " + (DateTime.Now - start));

        QueryExecutionListener listener = new QueryExecutionListener();

        storage.Listener = listener;

        Query         trackQuery = db.CreateQuery(typeof(Track));
        CodeGenerator code       = trackQuery.GetCodeGenerator();

        code.Predicate(code.And(code.Gt(code.Field("no"),
                                        code.Literal(0)),
                                code.Eq(code.Field(code.Field(code.Field("album"), "label"), "name"),
                                        code.Parameter(1, typeof(string)))));
        start = DateTime.Now;
        int nTracks = 0;

        for (int i = 0; i < nLabels; i++)
        {
            trackQuery[1] = "Label" + i;
            foreach (Track t in trackQuery)
            {
                nTracks += 1;
            }
        }
        Console.WriteLine("Elapsed time for searching of " + nTracks + " tracks: " + (DateTime.Now - start));
        Debug.Assert(nTracks == nAlbums * nTracksPerAlbum);

        String prev       = "";
        int    n          = 0;
        Query  labelQuery = db.CreateQuery(typeof(RecordLabel));

        code = labelQuery.GetCodeGenerator();
        code.OrderBy("name");
        foreach (RecordLabel label in labelQuery)
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n   += 1;
        }
        Debug.Assert(n == nLabels);

        prev = "";
        n    = 0;
        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.Like(code.Field("name"),
                                 code.Literal("Label%")));
        code.OrderBy("name");
        foreach (RecordLabel label in labelQuery)
        {
            Debug.Assert(prev.CompareTo(label.name) < 0);
            prev = label.name;
            n   += 1;
        }
        Debug.Assert(n == nLabels);

        n    = 0;
        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.In(code.Field("name"),
                               code.List(code.Literal("Label1"), code.Literal("Label2"), code.Literal("Label3"))));
        foreach (RecordLabel label in labelQuery)
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        n    = 0;
        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.And(code.Or(code.Eq(code.Field("name"),
                                                code.Literal("Label1")),
                                        code.Or(code.Eq(code.Field("name"),
                                                        code.Literal("Label2")),
                                                code.Eq(code.Field("name"),
                                                        code.Literal("Label3")))),
                                code.Like(code.Field("email"),
                                          code.Literal("contact@%"))));
        foreach (RecordLabel label in labelQuery)
        {
            n += 1;
        }
        Debug.Assert(n == 3);

        code = labelQuery.GetCodeGenerator();
        code.Predicate(code.And(code.Like(code.Field("phone"),
                                          code.Literal("+1%")),
                                code.In(code.Field("name"),
                                        code.Parameter(1, typeof(ArrayList)))));
        ArrayList list = new ArrayList(nLabels);

        for (int i = 0; i < nLabels; i++)
        {
            list.Add("Label" + i);
        }
        n             = 0;
        labelQuery[1] = list;
        foreach (RecordLabel label in labelQuery)
        {
            Debug.Assert(label.name == "Label" + n++);
        }
        Debug.Assert(n == nLabels);

        n    = 0;
        code = trackQuery.GetCodeGenerator();
        code.Predicate(code.Or(code.Eq(code.Field(code.Field(code.Field("album"), "label"), "name"),
                                       code.Literal("Label1")),
                               code.Eq(code.Field(code.Field(code.Field("album"), "label"), "name"),
                                       code.Literal("Label2"))));
        foreach (Track track in trackQuery)
        {
            Debug.Assert(track.album.label.name == "Label1" || track.album.label.name == "Label2");
            n += 1;
        }
        Debug.Assert(n == nAlbums * nTracksPerAlbum * 2 / nLabels);

        Debug.Assert(listener.nSequentialSearches == 0);
        Debug.Assert(listener.nSorts == 0);


        db.DropTable(typeof(Track));
        db.DropTable(typeof(Album));
        db.DropTable(typeof(RecordLabel));

        storage.Close();
    }