Exemplo n.º 1
0
        public void RenameIndexedTable()
        {
            DropTables(this.regex);

            Assert.IsFalse(Ns.TableExists("test-1"));
            Assert.IsFalse(Ns.TableExists("test-2"));
            Assert.IsFalse(Ns.TableExists("Test-2"));

            const string Schema =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name><Index>true</Index><QualifierIndex>true</QualifierIndex></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.CreateTable("test-1", Schema, CreateDispositions.CreateIfNotExist);
            Assert.IsTrue(Ns.TableExists("test-1"));

            if (IsHyper || IsThrift)
            {
                Assert.IsTrue(Ns.TableExists("^test-1"));
                Assert.IsTrue(Ns.TableExists("^^test-1"));
            }

            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
            }

            Ns.RenameTable("test-1", "test-2");
            Assert.IsFalse(Ns.TableExists("test-1"));
            Assert.IsTrue(Ns.TableExists("test-2"));

            if (IsHyper || IsThrift)
            {
                Assert.IsFalse(Ns.TableExists("^test-1"));
                Assert.IsFalse(Ns.TableExists("^^test-1"));
                Assert.IsTrue(Ns.TableExists("^test-2"));
                Assert.IsTrue(Ns.TableExists("^^test-2"));
            }

            Ns.RenameTable("test-2", "Test-2");
            Assert.IsFalse(Ns.TableExists("test-2"));
            using (var table = Ns.OpenTable("Test-2")) {
                Assert.AreEqual(table.Name, Ns.Name + "/Test-2");
            }

            Assert.IsTrue(Ns.TableExists("Test-2"));

            if (IsHyper || IsThrift)
            {
                Assert.IsFalse(Ns.TableExists("^test-2"));
                Assert.IsFalse(Ns.TableExists("^^test-2"));
                Assert.IsTrue(Ns.TableExists("^Test-2"));
                Assert.IsTrue(Ns.TableExists("^^Test-2"));
            }
        }
Exemplo n.º 2
0
        public void DumpAndLoadData()
        {
            if (!HasHQL)
            {
                return;
            }

            var tempPath  = Path.GetTempPath();
            var filenames = new[] { tempPath + "DumpTest.txt", tempPath + "DumpTest.gz", "fs://DumpTest.txt", "fs://DumpTest.gz" };

            {
                Ns.Exec("DROP TABLE IF EXISTS fruit", "CREATE TABLE fruit (tag, description)");

                Ns.Exec(
                    "INSERT INTO fruit VALUES" + "(\"cantelope\", \"tag:good\", \"Had with breakfast\"),"
                    + "(\"2009-08-02 08:30:00\", \"cantelope\", \"description\", \"A cultivated variety of muskmelon with orange flesh\"),"
                    + "(\"banana\", \"tag:great\", \"Had with lunch\")");

                ValidateFruitTable("fruit");

                foreach (var filename in filenames)
                {
                    Ns.Exec(string.Format("DUMP TABLE fruit INTO FILE '{0}'", filename));

                    var fname = filename;
                    if (filename.StartsWith("fs:"))
                    {
                        fname = Path.Combine(
                            (string)Context.Properties["Hypertable.DataDirectory"],
                            "fs/local",
                            filename.Replace("fs://", ""));
                    }

                    Assert.IsTrue(File.Exists(fname));

                    Ns.Exec("DROP TABLE IF EXISTS fruit2", "CREATE TABLE fruit2 (tag, description)");
                    Ns.Exec(string.Format("LOAD DATA INFILE '{0}' INTO TABLE fruit2", filename));
                    ValidateFruitTable("fruit2");

                    File.Delete(fname);
                }

                foreach (var filename in filenames)
                {
                    Ns.Exec(string.Format("SELECT * FROM fruit DISPLAY_TIMESTAMPS INTO FILE '{0}'", filename));

                    var fname = filename;
                    if (filename.StartsWith("fs:"))
                    {
                        fname = Path.Combine(
                            (string)Context.Properties["Hypertable.DataDirectory"],
                            "fs/local",
                            filename.Replace("fs://", ""));
                    }

                    Assert.IsTrue(File.Exists(fname));

                    Ns.Exec("DROP TABLE IF EXISTS fruit2", "CREATE TABLE fruit2 (tag, description)");
                    Ns.Exec(string.Format("LOAD DATA INFILE '{0}' INTO TABLE fruit2", filename));
                    ValidateFruitTable("fruit2");

                    File.Delete(fname);
                }

                Ns.Exec("DROP TABLE fruit", "DROP TABLE fruit2");
            }

            {
                const string Schema = "<Schema><AccessGroup><ColumnFamily><Name>bin</Name></ColumnFamily></AccessGroup></Schema>";

                var rng = new Random();
                var buf = new byte[1024];
                var all = new byte[255];
                for (var i = 0; i < 255; ++i)
                {
                    all[i] = (byte)i;
                }

                var data = new Dictionary <string, byte[]>();

                var table = Ns.OpenTable("bin", Schema, OpenDispositions.CreateAlways);
                using (var mutator = table.CreateMutator())
                {
                    var key = new Key {
                        ColumnFamily = "bin"
                    };
                    for (var i = 0; i < 10000; ++i)
                    {
                        do
                        {
                            key.Row = Guid.NewGuid().ToString();
                        }while (data.ContainsKey(key.Row));

                        rng.NextBytes(buf);
                        mutator.Set(key, buf);

                        data.Add(key.Row, (byte[])buf.Clone());
                    }

                    do
                    {
                        key.Row = Guid.NewGuid().ToString();
                    }while (data.ContainsKey(key.Row));

                    mutator.Set(key, all);
                    data.Add(key.Row, (byte[])all.Clone());
                }

                foreach (var filename in filenames)
                {
                    Ns.Exec(string.Format("DUMP TABLE bin INTO FILE '{0}'", filename));

                    var fname = filename;
                    if (filename.StartsWith("fs:"))
                    {
                        fname = Path.Combine(
                            (string)Context.Properties["Hypertable.DataDirectory"],
                            "fs/local",
                            filename.Replace("fs://", ""));
                    }

                    Assert.IsTrue(File.Exists(fname));

                    Ns.Exec("DROP TABLE IF EXISTS bin2", "CREATE TABLE bin2 (bin)");
                    Ns.Exec(string.Format("LOAD DATA INFILE '{0}' INTO TABLE bin2", filename));

                    foreach (var cell in table.CreateScanner())
                    {
                        Assert.IsTrue(data.ContainsKey(cell.Key.Row));
                        Assert.IsTrue(data[cell.Key.Row].SequenceEqual(cell.Value));
                    }

                    File.Delete(fname);
                }

                Ns.Exec("DROP TABLE bin", "DROP TABLE bin2");
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Creates and opens a table in the 'test' namespace, drops existing table.
 /// </summary>
 /// <param name = "tableName">Table name.</param>
 /// <param name = "schema">Table xml schema.</param>
 /// <returns>Opened table.</returns>
 protected static ITable EnsureTable(string tableName, string schema)
 {
     return(Ns.OpenTable(tableName, schema, OpenDispositions.CreateAlways));
 }
Exemplo n.º 4
0
        public void AlterIndexedTable()
        {
            DropTables(this.regex);

            Assert.IsFalse(Ns.TableExists("test-1"));

            const string SchemaA =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name><Index>true</Index><QualifierIndex>true</QualifierIndex></ColumnFamily>" +
                "</AccessGroup>" + "</Schema>";

            Ns.CreateTable("test-1", SchemaA);
            Assert.IsTrue(Ns.TableExists("test-1"));
            Ns.CreateTable("test-1", SchemaA, CreateDispositions.CreateIfNotExist);

            if (IsHyper || IsThrift)
            {
                Assert.IsTrue(Ns.TableExists("^test-1"));
                Assert.IsTrue(Ns.TableExists("^^test-1"));
            }

            var _schemaA = Ns.GetTableSchema("test-1");

            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
                Assert.AreEqual(table.Schema, _schemaA);
            }

            const string SchemaB =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>b</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.AlterTable("test-1", SchemaB);

            if (IsHyper || IsThrift)
            {
                Assert.IsFalse(Ns.TableExists("^test-1"));
                Assert.IsFalse(Ns.TableExists("^^test-1"));
            }

            var _schemaB = Ns.GetTableSchema("test-1");

            Assert.AreNotEqual(_schemaB, _schemaA);
            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
                Assert.AreEqual(table.Schema, _schemaB);
            }

            const string SchemaC =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name></ColumnFamily>" +
                "<ColumnFamily><Name>b</Name><Index>true</Index></ColumnFamily>" +
                "</AccessGroup>" + "</Schema>";

            Ns.AlterTable("test-1", SchemaC);

            if (IsHyper || IsThrift)
            {
                Assert.IsTrue(Ns.TableExists("^test-1"));
                Assert.IsFalse(Ns.TableExists("^^test-1"));
            }

            const string SchemaD =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name><Index>true</Index><QualifierIndex>true</QualifierIndex></ColumnFamily>" +
                "<ColumnFamily><Name>b</Name><Index>true</Index></ColumnFamily>" +
                "</AccessGroup>" + "</Schema>";

            Ns.AlterTable("test-1", SchemaD);

            if (IsHyper || IsThrift)
            {
                Assert.IsTrue(Ns.TableExists("^test-1"));
                Assert.IsTrue(Ns.TableExists("^^test-1"));
            }
        }
Exemplo n.º 5
0
        public void RenameTable()
        {
            DropTables(this.regex);
            DropNamespaces(this.regex);

            Assert.IsFalse(Ns.TableExists("test-1"));
            Assert.IsFalse(Ns.TableExists("test-2"));
            Assert.IsFalse(Ns.TableExists("Test-2"));

            const string Schema =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.CreateTable("test-1", Schema, CreateDispositions.CreateIfNotExist);
            Assert.IsTrue(Ns.TableExists("test-1"));
            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
            }

            Ns.RenameTable("test-1", "test-2");
            Assert.IsFalse(Ns.TableExists("test-1"));
            Assert.IsTrue(Ns.TableExists("test-2"));

            Ns.RenameTable("test-2", "Test-2");
            Assert.IsFalse(Ns.TableExists("test-2"));
            using (var table = Ns.OpenTable("Test-2")) {
                Assert.AreEqual(table.Name, Ns.Name + "/Test-2");
            }

            Assert.IsTrue(Ns.TableExists("Test-2"));

            try
            {
                Ns.RenameTable("test-11", "test-111");
                Assert.Fail();
            }
            catch (TableNotFoundException)
            {
            }
            catch
            {
                Assert.Fail();
            }

            try
            {
                Ns.CreateNamespace("test-22");
                Ns.RenameTable("test-22", "test-222");
                Assert.Fail();
            }
            catch (TableNotFoundException)
            {
            }

            /*catch
             * {
             *  Assert.Fail();
             * }*/

            try
            {
                Ns.RenameTable("Test-2", "test-22");
                Assert.Fail();
            }
            catch (NameAlreadyInUseException)
            {
            }
            catch
            {
                Assert.Fail();
            }
        }
Exemplo n.º 6
0
        public void CreateOpenDropTable()
        {
            DropTables(this.regex);

            try {
                Ns.OpenTable("table_does_not_exists");
                Assert.Fail();
            }
            catch (TableNotFoundException) {
            }
            catch {
                Assert.Fail();
            }

            Assert.IsFalse(Ns.TableExists("test-1"));
            Assert.IsFalse(Ns.TableExists("Test-2"));
            Assert.IsFalse(Ns.TableExists("test-3"));

            const string Schema =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.CreateTable("test-1", Schema);
            Assert.IsTrue(Ns.TableExists("test-1"));
            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
            }

            Ns.CreateTableLike("Test-2", "test-1");
            Assert.IsTrue(Ns.TableExists("Test-2"));
            Ns.CreateTableLike("Test-2", "test-1", CreateDispositions.CreateIfNotExist);
            Assert.IsFalse(Ns.TableExists("test-2")); // case sensitive
            using (var table = Ns.OpenTable("Test-2")) {
                Assert.AreEqual(table.Name, Ns.Name + "/Test-2");
            }

            Ns.CreateTable("test-3", Ns.GetTableSchema("test-1"), CreateDispositions.CreateIfNotExist);
            Assert.IsTrue(Ns.TableExists("test-3"));
            using (var table = Ns.OpenTable("test-3")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-3");
            }

            var tables = Ns.Tables;

            Assert.IsTrue(tables.Contains("test-1"));
            Assert.IsTrue(tables.Contains("Test-2"));
            Assert.IsTrue(tables.Contains("test-3"));

            try
            {
                Ns.CreateTableLike("Test-2", "test-1");
                Assert.Fail();
            }
            catch (TableExistsException)
            {
            }
            catch
            {
                Assert.Fail();
            }

            try
            {
                Ns.CreateNamespace("test-1");
                Assert.Fail();
            }
            catch (NameAlreadyInUseException)
            {
            }
            catch
            {
                Assert.Fail();
            }

            const string Schema2 =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily id=\"2\"><Name>a</Name></ColumnFamily>" +
                "<ColumnFamily id=\"1\"><Name>b</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.CreateTable("test-4", Schema2);
            Assert.IsTrue(Ns.TableExists("test-4"));
            using (var table = Ns.OpenTable("test-4"))
            {
                Assert.AreEqual("test/test-4", table.Name);
                Assert.AreEqual(2, table.GetTableSchema().AccessGroups.First().ColumnFamilies.First(cf => cf.Name == "a").Id);
            }

            const string Schema3 =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily id='2'><Name>a</Name></ColumnFamily>" +
                "<ColumnFamily id='3'><Name>b</Name></ColumnFamily>" +
                "<ColumnFamily id='1'><Name>c</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.CreateTable("test-5", Schema3);
            Assert.IsTrue(Ns.TableExists("test-5"));
            using (var table = Ns.OpenTable("test-5"))
            {
                Assert.AreEqual(3, table.GetTableSchema().AccessGroups.First().ColumnFamilies.First(cf => cf.Name == "b").Id);
            }

            Ns.CreateTable("1/2/3/test-5", Schema3, CreateDispositions.CreateIntermediate);
            Assert.IsTrue(Ns.NamespaceExists("1/2/3"));
            Assert.IsTrue(Ns.TableExists("1/2/3/test-5"));
            using (var table = Ns.OpenTable("1/2/3/test-5"))
            {
                Assert.AreEqual("test/1/2/3/test-5", table.Name);
                Assert.AreEqual(3, table.GetTableSchema().AccessGroups.First().ColumnFamilies.First(cf => cf.Name == "b").Id);
            }
        }
Exemplo n.º 7
0
        public void AlterTable()
        {
            DropTables(this.regex);

            Assert.IsFalse(Ns.TableExists("test-1"));

            const string SchemaA =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>a</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            const string SchemaB =
                "<Schema><AccessGroup name=\"default\">" +
                "<ColumnFamily><Name>b</Name></ColumnFamily>" +
                "</AccessGroup></Schema>";

            Ns.CreateTable("test-1", SchemaA);
            Assert.IsTrue(Ns.TableExists("test-1"));
            Ns.CreateTable("test-1", SchemaA, CreateDispositions.CreateIfNotExist);
            var _schemaA = Ns.GetTableSchema("test-1");

            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
                Assert.AreEqual(table.Schema, _schemaA);

                using (var mutator = table.CreateMutator())
                {
                    mutator.Set(new Key("R1", "a"), new byte[] { 1, 2, 3 });
                }
            }

            Ns.AlterTable("test-1", SchemaB);
            var _schemaB = Ns.GetTableSchema("test-1");

            Assert.AreNotEqual(_schemaB, _schemaA);
            using (var table = Ns.OpenTable("test-1")) {
                Assert.AreEqual(table.Name, Ns.Name + "/test-1");
                Assert.AreEqual(table.Schema, _schemaB);

                using (var mutator = table.CreateMutator())
                {
                    try
                    {
                        mutator.Set(new Key("R1", "a"), new byte[] { 1, 2, 3 });
                        Assert.Fail();
                    }
                    catch (BadKeyException)
                    {
                    }
                    catch
                    {
                        Assert.Fail();
                    }

                    mutator.Set(new Key("R2", "b"), new byte[] { 1, 2, 3 });
                }

                Ns.AlterTable("test-1", SchemaA);

                using (var mutator = table.CreateMutator())
                {
                    mutator.Set(new Key("R1", "a"), new byte[] { 1, 2, 3 });

                    try
                    {
                        mutator.Set(new Key("R2", "b"), new byte[] { 1, 2, 3 });
                    }
                    catch (BadKeyException)
                    {
                    }
                    catch
                    {
                        Assert.Fail();
                    }
                }

                var existingSchema = TableSchema.Parse(Ns.GetTableSchema("test-1", true));
                Assert.IsTrue(existingSchema.GenerationSpecified);
                Assert.IsTrue(existingSchema.AccessGroups.All(ag => ag.GenerationSpecified));
                Assert.IsTrue(existingSchema.AccessGroups.SelectMany(ag => ag.ColumnFamilies).All(cf => cf.GenerationSpecified));

                var newSchema = TableSchema.Parse(Ns.GetTableSchema("test-1"));
                newSchema.AccessGroups.First().ColumnFamilies.Insert(0, new ColumnFamily {
                    Name = "new"
                });
                Ns.AlterTable("test-1", newSchema.ToString());
                var alteredSchema = TableSchema.Parse(Ns.GetTableSchema("test-1", true));
                Assert.IsTrue(alteredSchema.GenerationSpecified);
                Assert.IsTrue(existingSchema.Generation < alteredSchema.Generation);
                Assert.IsTrue(existingSchema.AccessGroups.All(ag => ag.GenerationSpecified));
                Assert.IsTrue(existingSchema.AccessGroups.SelectMany(ag => ag.ColumnFamilies).All(cf => cf.GenerationSpecified));

                var d = alteredSchema.AccessGroups.SelectMany(ag => ag.ColumnFamilies).ToDictionary(cf => cf.Id);
                foreach (var cf in existingSchema.AccessGroups.SelectMany(ag => ag.ColumnFamilies))
                {
                    Assert.IsTrue(d.ContainsKey(cf.Id));
                    Assert.AreEqual(cf.Name, d[cf.Id].Name);
                }
            }

            try
            {
                Ns.AlterTable("test-11", SchemaB);
                Assert.Fail();
            }
            catch (TableNotFoundException)
            {
            }
            catch
            {
                Assert.Fail();
            }

            try
            {
                Ns.CreateNamespace("test-22");
                Ns.AlterTable("test-22", SchemaB);
                Assert.Fail();
            }
            catch (TableNotFoundException)
            {
            }
            catch
            {
                Assert.Fail();
            }
        }