public void CanGetTableInfoInDifferentTableManager() { var tableMetadataStorageFilename = RandomFilename; var fieldMetadataStorageFilename = RandomFilename; tableManager = new TableManager(true, _transaction, tableMetadataStorageFilename, fieldMetadataStorageFilename); var schema = new Schema(); schema.AddIntField("field1"); schema.AddBlobField("field2", 40); tableManager.CreateTable("table1", schema, _transaction); _transaction.Commit(); _concurrencyManager = new ConcurrencyManager(); _transaction = new Transaction(_dispatcher, _bufferManager, _concurrencyManager, _fileManager, _logManager); tableManager = new TableManager(false, _transaction, tableMetadataStorageFilename, fieldMetadataStorageFilename); var tableInfo = tableManager.GetTableInfo("table1", _transaction); Assert.AreEqual("table1.tbl", tableInfo.Filename); Assert.AreEqual(2, tableInfo.Schema.Fields.Count); Assert.AreEqual(48, tableInfo.RecordLength); var field1 = tableInfo.Schema.Fields["field1"]; var field2 = tableInfo.Schema.Fields["field2"]; Assert.AreEqual(FieldType.Integer, field1.Type); Assert.AreEqual(FieldType.Blob, field2.Type); Assert.AreEqual(40, field2.Length); }
public void CanReadWrittenBlobRecord() { var tableFile = RandomFilename; var schema = new Schema(); schema.AddBlobField("field", 40); _tableInfo = new TableInfo(tableFile, schema); _recordFile = new RecordFile(_tableInfo, _transaction); _recordFile.MoveToRID(new RID(0, 0)); _recordFile.SetBlob("field", new byte[] { 1, 2, 3, 4, 5 }); _recordFile.Close(); _transaction.Commit(); var cm = new ConcurrencyManager(); var newTr = new Transaction(_dispatcher, _bufferManager, cm, _fileManager, _logManager); var rf = new RecordFile(_tableInfo, newTr); rf.MoveToRID(new RID(0, 0)); var value = rf.GetBlob("field"); Assert.AreEqual(new byte[] { 1, 2, 3, 4, 5 }, value); }
public void CanGetTableInfoWhileItWasUncommited() { var tableMetadataStorageFilename = RandomFilename; var fieldMetadataStorageFilename = RandomFilename; tableManager = new TableManager(true, _transaction, tableMetadataStorageFilename, fieldMetadataStorageFilename); var schema = new Schema(); schema.AddIntField("field1"); schema.AddBlobField("field2", 40); tableManager.CreateTable("table1", schema, _transaction); var tableInfo = tableManager.GetTableInfo("table1", _transaction); Assert.AreEqual("table1.tbl", tableInfo.Filename); Assert.AreEqual(2, tableInfo.Schema.Fields.Count); Assert.AreEqual(48, tableInfo.RecordLength); var field1 = tableInfo.Schema.Fields["field1"]; var field2 = tableInfo.Schema.Fields["field2"]; Assert.AreEqual(FieldType.Integer, field1.Type); Assert.AreEqual(FieldType.Blob, field2.Type); Assert.AreEqual(40, field2.Length); }
public void CanInsertRecordWithBlob() { var fn = RandomFilename; var block = new Block(fn, 0); var sch = new Schema(); sch.AddBlobField("field", 50); recordPage = new RecordPage(block, _tableInfo, _transaction, _fileManager); var canInsert = recordPage.Insert(); recordPage.SetBlob("field", new byte[] { 1, 2, 3 }); recordPage.Close(); _transaction.Commit(); var page = _fileManager.ResolvePage(block); page.Read(block); page.GetInt(0, out var isUsed); page.GetBlob(4, out var value); Assert.IsTrue(canInsert); Assert.AreEqual(1, isUsed); Assert.AreEqual(new byte[] { 1, 2, 3 }, value); }
private Schema CreateSchema() { var schema = new Schema(); schema.AddIntField("blk"); schema.AddIntField("id"); // TODO for all types var indexType = _tableInfo.Schema.FieldType(_fieldName); switch (indexType) { case FieldType.Bool: // lol dude why u want BTree on bool??? Are you insane? schema.AddBoolField("val"); break; case FieldType.Byte: schema.AddByteField("val"); break; case FieldType.Integer: schema.AddIntField("val"); break; case FieldType.Date: schema.AddDateField("val"); break; case FieldType.Blob: var blobFieldLength = _tableInfo.Schema.Length(_fieldName); schema.AddBlobField("val", blobFieldLength); break; case FieldType.String: var stringFieldLength = _tableInfo.Schema.Length(_fieldName); schema.AddStringField("val", stringFieldLength); break; } return(schema); }
public void CanFormatPageWithOneBlobFieldInside() { _schema.AddBlobField("field", 30); _tableInfo = new TableInfo(RandomFilename, _schema); _recordFormatter = new RecordFormatter(_tableInfo, _fileManager); var page = _fileManager.ResolvePage(); Assert.DoesNotThrow(() => { _recordFormatter.Format(page); }); }
public void CanCreateCompleteRecord() { var schema = new Schema(); schema.AddIntField("field1"); schema.AddBoolField("field2"); schema.AddByteField("field3"); schema.AddBlobField("field4", 10); schema.AddStringField("field5", 10); schema.AddDateField("field6"); var tableInfo = new TableInfo("table", schema); Assert.AreEqual(42, tableInfo.RecordLength); }
public void CanAddBlobField() { var schema = new Schema(); Assert.DoesNotThrow(() => { schema.AddBlobField("field", 50); }); var fields = schema.Fields; var field = fields.First(); Assert.IsNotNull(fields); Assert.AreEqual(1, fields.Count); Assert.AreEqual(FieldType.Blob, field.Value.Type); Assert.AreEqual(50, field.Value.Length); Assert.AreEqual("field", field.Key); }
public void CanCreateBlobIndex() { var indexTableName = RandomFilename; var schema = new Schema(); schema.AddBlobField("Field", 30); tableInfo = new TableInfo(indexTableName, schema); tableManager.CreateTable(indexTableName, schema, _transaction); indexInfo = new IndexInfo("index", indexTableName, "Field", tableManager, statisticsManager, _transaction, 1024); // Todo check them out var indexSchema = indexInfo.Open(); Assert.Pass(); }
public void CanWriteBlobOnARecord() { var tableFile = RandomFilename; var schema = new Schema(); schema.AddBlobField("field", 50); _tableInfo = new TableInfo(tableFile, schema); _recordFile = new RecordFile(_tableInfo, _transaction); _recordFile.MoveToRID(new RID(0, 0)); _recordFile.SetBlob("field", new byte[] { 10, 20 }); _recordFile.Close(); _transaction.Commit(); var block = new IO.Primitives.Block(tableFile + ".tbl", 0); var page = _fileManager.ResolvePage(block); page.Read(block); _ = page.GetBlob(4, out var value); Assert.AreEqual(new byte[] { 10, 20 }, value); }
public void WouldGetNullIfTableWasNotFound() { var tableMetadataStorageFilename = RandomFilename; var fieldMetadataStorageFilename = RandomFilename; tableManager = new TableManager(true, _transaction, tableMetadataStorageFilename, fieldMetadataStorageFilename); var schema = new Schema(); schema.AddIntField("field1"); schema.AddBlobField("field2", 40); tableManager.CreateTable("table1", schema, _transaction); _transaction.Commit(); _concurrencyManager = new ConcurrencyManager(); _transaction = new Transaction(_dispatcher, _bufferManager, _concurrencyManager, _fileManager, _logManager); tableManager = new TableManager(false, _transaction, tableMetadataStorageFilename, fieldMetadataStorageFilename); var tableInfo = tableManager.GetTableInfo("table2", _transaction); Assert.IsNull(tableInfo); }
public void CanReadBlobFromRecord() { var fn = RandomFilename; var block = new Block(fn, 0); var sch = new Schema(); sch.AddBlobField("field", 30); var page = _fileManager.ResolvePage(block); page.Read(block); page.SetInt(0, 4); page.SetBlob(4, new byte[] { 1, 2, 3 }); page.Write(block); recordPage = new RecordPage(block, _tableInfo, _transaction, _fileManager); recordPage.MoveToId(0); var value = recordPage.GetBlob("field"); Assert.AreEqual(new byte[] { 1, 2, 3 }, value); }
public void CanCreateTable() { var tableMetadataStorageFilename = RandomFilename; var fieldMetadataStorageFilename = RandomFilename; tableManager = new TableManager(true, _transaction, tableMetadataStorageFilename, fieldMetadataStorageFilename); var schema = new Schema(); schema.AddIntField("field1"); schema.AddBlobField("field2", 40); tableManager.CreateTable("table1", schema, _transaction); _transaction.Commit(); _concurrencyManager = new ConcurrencyManager(); _transaction = new Transaction(_dispatcher, _bufferManager, _concurrencyManager, _fileManager, _logManager); var tableCatalogSchema = new Schema(); tableCatalogSchema.AddStringField("tblname", TableManager.MAX_NAME_LENGTH); tableCatalogSchema.AddIntField("reclength"); var tableCatalogInfo = new TableInfo(tableMetadataStorageFilename, tableCatalogSchema); var tableCatalogRecordPage = new RecordFile(tableCatalogInfo, _transaction); tableCatalogRecordPage.BeforeFirst(); tableCatalogRecordPage.Next(); // skip all tables definition and all fields definition tables tableCatalogRecordPage.Next(); tableCatalogRecordPage.Next(); var tableName = tableCatalogRecordPage.GetString("tblname"); var recordLength = tableCatalogRecordPage.GetInt("reclength"); Assert.AreEqual("table1", tableName); Assert.AreEqual(new TableInfo("table1", schema).RecordLength, recordLength); var fieldCatalogSchema = new Schema(); fieldCatalogSchema.AddStringField("tblname", TableManager.MAX_NAME_LENGTH); fieldCatalogSchema.AddStringField("fldname", TableManager.MAX_NAME_LENGTH); fieldCatalogSchema.AddIntField("type"); fieldCatalogSchema.AddIntField("length"); fieldCatalogSchema.AddIntField("offset"); var fieldCatalogInfo = new TableInfo(fieldMetadataStorageFilename, fieldCatalogSchema); var fieldCatalogRecordPage = new RecordFile(fieldCatalogInfo, _transaction); fieldCatalogRecordPage.BeforeFirst(); fieldCatalogRecordPage.Next(); // 2 field for table metadata table, 5 fields for field metadata table fieldCatalogRecordPage.Next(); fieldCatalogRecordPage.Next(); fieldCatalogRecordPage.Next(); fieldCatalogRecordPage.Next(); fieldCatalogRecordPage.Next(); fieldCatalogRecordPage.Next(); fieldCatalogRecordPage.Next(); var field1Table = fieldCatalogRecordPage.GetString("tblname"); var field1Name = fieldCatalogRecordPage.GetString("fldname"); var field1Type = fieldCatalogRecordPage.GetInt("type"); var field1Length = fieldCatalogRecordPage.GetInt("length"); var field1Offset = fieldCatalogRecordPage.GetInt("offset"); Assert.AreEqual("table1", field1Table); Assert.AreEqual("field1", field1Name); Assert.AreEqual(2, field1Type); Assert.AreEqual(sizeof(int), field1Length); Assert.AreEqual(0, field1Offset); fieldCatalogRecordPage.Next(); var field2Table = fieldCatalogRecordPage.GetString("tblname"); var field2Name = fieldCatalogRecordPage.GetString("fldname"); var field2Type = fieldCatalogRecordPage.GetInt("type"); var field2Length = fieldCatalogRecordPage.GetInt("length"); var field2Offset = fieldCatalogRecordPage.GetInt("offset"); Assert.AreEqual("table1", field2Table); Assert.AreEqual("field2", field2Name); Assert.AreEqual(4, field2Type); Assert.AreEqual(40, field2Length); Assert.AreEqual(4, field2Offset); }