public bool AlterType(UserTypeInfo typeInfo) { if (!DropType(typeInfo.TypeName)) return false; CreateType(typeInfo); return true; }
public UserType(UserTypeInfo typeInfo) : base(typeInfo.TypeName.FullName, SqlTypeCode.Type) { if (typeInfo == null) throw new ArgumentNullException("typeInfo"); TypeInfo = typeInfo; }
public UserType(UserTypeInfo typeInfo) : base(typeInfo.TypeName.FullName, SqlTypeCode.Type) { if (typeInfo == null) { throw new ArgumentNullException("typeInfo"); } TypeInfo = typeInfo; }
protected override bool OnSetUp(string testName, IQuery query) { var typeName = ObjectName.Parse("APP.type1"); var typeInfo = new UserTypeInfo(typeName); typeInfo.AddMember("a", PrimitiveTypes.Integer()); typeInfo.AddMember("b", PrimitiveTypes.DateTime()); query.Access().CreateObject(typeInfo); return true; }
public bool AlterType(UserTypeInfo typeInfo) { if (!DropType(typeInfo.TypeName)) { return(false); } CreateType(typeInfo); return(true); }
public void InstantiateSimpleObject() { var name = ObjectName.Parse("APP.Type1"); var typeInfo = new UserTypeInfo(name); typeInfo.AddMember("a", PrimitiveTypes.String()); typeInfo.AddMember("b", PrimitiveTypes.Integer()); var type = new UserType(typeInfo); var obj = type.NewObject(SqlExpression.Constant("test"), SqlExpression.Constant(23)); Assert.IsNotNull(obj); Assert.IsInstanceOf<SqlUserObject>(obj); Assert.IsFalse(obj.IsNull); }
public void CreateSimple() { var name = ObjectName.Parse("APP.Type1"); var typeInfo = new UserTypeInfo(name); typeInfo.AddMember("a", PrimitiveTypes.String()); typeInfo.AddMember("b", PrimitiveTypes.Integer()); var type = new UserType(typeInfo); Assert.IsNotNull(type); Assert.IsNull(type.TypeInfo.ParentType); Assert.IsNotNull(type.FullName); Assert.AreEqual(name, type.FullName); Assert.AreEqual(2, type.MemberCount); Assert.IsFalse(type.IsPrimitive); Assert.IsFalse(type.IsIndexable); Assert.IsFalse(type.IsNull); }
public void CreateType(UserTypeInfo typeInfo) { if (typeInfo == null) { throw new ArgumentNullException("typeInfo"); } try { var id = Transaction.NextTableId(TypeTableName); var typeTable = Transaction.GetMutableTable(TypeTableName); var typeMemberTable = Transaction.GetMutableTable(TypeMemberTableName); var parentName = typeInfo.ParentType != null?typeInfo.ParentType.ToString() : null; var row = typeTable.NewRow(); row.SetValue(0, id); row.SetValue(1, typeInfo.TypeName.ParentName); row.SetValue(2, typeInfo.TypeName.Name); row.SetValue(3, parentName); row.SetValue(4, typeInfo.IsSealed); row.SetValue(5, typeInfo.IsAbstract); row.SetValue(6, typeInfo.Owner); typeTable.AddRow(row); for (int i = 0; i < typeInfo.MemberCount; i++) { var member = typeInfo[i]; row = typeMemberTable.NewRow(); row.SetValue(0, id); row.SetValue(1, member.MemberName); row.SetValue(2, member.MemberType.ToString()); typeMemberTable.AddRow(row); } Transaction.OnObjectCreated(DbObjectType.Type, typeInfo.TypeName); } finally { typesCache.Clear(); } }
public void CreateType(UserTypeInfo typeInfo) { if (typeInfo == null) throw new ArgumentNullException("typeInfo"); try { var id = Transaction.NextTableId(TypeTableName); var typeTable = Transaction.GetMutableTable(TypeTableName); var typeMemberTable = Transaction.GetMutableTable(TypeMemberTableName); var parentName = typeInfo.ParentType != null ? typeInfo.ParentType.ToString() : null; var row = typeTable.NewRow(); row.SetValue(0, id); row.SetValue(1, typeInfo.TypeName.ParentName); row.SetValue(2, typeInfo.TypeName.Name); row.SetValue(3, parentName); row.SetValue(4, typeInfo.IsSealed); row.SetValue(5, typeInfo.IsAbstract); row.SetValue(6, typeInfo.Owner); typeTable.AddRow(row); for (int i = 0; i < typeInfo.MemberCount; i++) { var member = typeInfo[i]; row = typeMemberTable.NewRow(); row.SetValue(0, id); row.SetValue(1, member.MemberName); row.SetValue(2, member.MemberType.ToString()); typeMemberTable.AddRow(row); } Transaction.OnObjectCreated(DbObjectType.Type, typeInfo.TypeName); } finally { typesCache.Clear(); } }
public UserType GetUserType(ObjectName typeName) { UserType userType; if (!typesCache.TryGetValue(typeName, out userType)) { var typeTable = Transaction.GetTable(TypeTableName); var membersTable = Transaction.GetTable(TypeMemberTableName); var schemaName = typeName.ParentName; var name = typeName.Name; var schemaColumn = typeTable.GetResolvedColumnName(1); var nameColumn = typeTable.GetResolvedColumnName(2); var idColumn = membersTable.GetResolvedColumnName(0); UserTypeInfo typeInfo; using (var session = new SystemSession(Transaction)) { using (var query = session.CreateQuery()) { var t = typeTable.SimpleSelect(query, schemaColumn, SqlExpressionType.Equal, SqlExpression.Constant(schemaName)); t = t.ExhaustiveSelect(query, SqlExpression.Equal(SqlExpression.Reference(nameColumn), SqlExpression.Constant(name))); if (t.RowCount == 0) return null; var id = t.GetValue(0, 0); var parentField = t.GetValue(0, 3); ObjectName parentType = null; if (!Field.IsNullField(parentField)) { parentType = ObjectName.Parse(parentField.Value.ToString()); } typeInfo = new UserTypeInfo(typeName, parentType); var isSealedField = t.GetValue(0, 4); var isAbstractField = t.GetValue(0, 5); if (!Field.IsNullField(isSealedField)) { typeInfo.IsSealed = (SqlBoolean) isSealedField.AsBoolean().Value; } if (!Field.IsNullField(isAbstractField)) { typeInfo.IsAbstract = (SqlBoolean) isAbstractField.AsBoolean().Value; } var owner = t.GetValue(0, 6).Value.ToString(); typeInfo.Owner = owner; var t2 = membersTable.SimpleSelect(query, idColumn, SqlExpressionType.Equal, SqlExpression.Constant(id)); foreach (var row in t2) { var memberName = row.GetValue(1).Value.ToString(); var memberTypeString = row.GetValue(2).Value.ToString(); var memberType = SqlType.Parse(Transaction.Context, memberTypeString); if (memberType == null) throw new InvalidOperationException(String.Format("Cannot find the type '{0}' for member '{1}' of type '{2}'.", memberTypeString, memberName, typeName)); typeInfo.AddMember(memberName, memberType); } } } userType = new UserType(typeInfo); typesCache[typeName] = userType; } return userType; }
public static void TestSetUp() { var typeInfo = new UserTypeInfo(ObjectName.Parse("APP.test_type")); typeInfo.AddMember("a", PrimitiveTypes.Integer()); Type = new UserType(typeInfo); }
protected override void ExecuteStatement(ExecutionContext context) { //if (!context.User.CanCreateInSchema(TypeName.ParentName)) // throw new SecurityException(String.Format("The user '{0}' has no rights to create in schema '{1}'.", // context.User.Name, TypeName.ParentName)); if (ParentTypeName != null) { if (!context.DirectAccess.TypeExists(ParentTypeName)) throw new StatementException(String.Format("The type '{0}' inherits from the type '{1}' that does not exist.", TypeName, ParentTypeName)); if (context.DirectAccess.IsTypeSealed(ParentTypeName)) throw new StatementException(String.Format("The type '{0}' is sealed and cannot be inherited by '{1}'.", ParentTypeName, TypeName)); } if (context.DirectAccess.TypeExists(TypeName)) { if (!ReplaceIfExists) throw new StatementException(String.Format("The type '{0}' already exists.", TypeName)); context.DirectAccess.DropType(TypeName); } var typeInfo = new UserTypeInfo(TypeName, ParentTypeName) { IsAbstract = IsAbstract, IsSealed = IsSealed }; foreach (var member in Members) { typeInfo.AddMember(member); } typeInfo.Owner = context.User.Name; context.DirectAccess.CreateType(typeInfo); context.DirectAccess.GrantOn(DbObjectType.Type, TypeName, context.User.Name, PrivilegeSets.TableAll, true); }
protected override bool OnSetUp(string testName, IQuery query) { if (testName.EndsWith("WithUserType")) { var typeName = ObjectName.Parse("APP.type1"); var typeInfo = new UserTypeInfo(typeName); typeInfo.AddMember("a", PrimitiveTypes.String()); typeInfo.AddMember("b", PrimitiveTypes.Integer()); query.Access().CreateObject(typeInfo); } CreateTestTable(query, testName); return true; }
public UserType GetUserType(ObjectName typeName) { UserType userType; if (!typesCache.TryGetValue(typeName, out userType)) { var typeTable = Transaction.GetTable(TypeTableName); var membersTable = Transaction.GetTable(TypeMemberTableName); var schemaName = typeName.ParentName; var name = typeName.Name; var schemaColumn = typeTable.GetResolvedColumnName(1); var nameColumn = typeTable.GetResolvedColumnName(2); var idColumn = membersTable.GetResolvedColumnName(0); UserTypeInfo typeInfo; using (var session = new SystemSession(Transaction)) { using (var query = session.CreateQuery()) { var t = typeTable.SimpleSelect(query, schemaColumn, SqlExpressionType.Equal, SqlExpression.Constant(schemaName)); t = t.ExhaustiveSelect(query, SqlExpression.Equal(SqlExpression.Reference(nameColumn), SqlExpression.Constant(name))); if (t.RowCount == 0) { return(null); } var id = t.GetValue(0, 0); var parentField = t.GetValue(0, 3); ObjectName parentType = null; if (!Field.IsNullField(parentField)) { parentType = ObjectName.Parse(parentField.Value.ToString()); } typeInfo = new UserTypeInfo(typeName, parentType); var isSealedField = t.GetValue(0, 4); var isAbstractField = t.GetValue(0, 5); if (!Field.IsNullField(isSealedField)) { typeInfo.IsSealed = (SqlBoolean)isSealedField.AsBoolean().Value; } if (!Field.IsNullField(isAbstractField)) { typeInfo.IsAbstract = (SqlBoolean)isAbstractField.AsBoolean().Value; } var owner = t.GetValue(0, 6).Value.ToString(); typeInfo.Owner = owner; var t2 = membersTable.SimpleSelect(query, idColumn, SqlExpressionType.Equal, SqlExpression.Constant(id)); foreach (var row in t2) { var memberName = row.GetValue(1).Value.ToString(); var memberTypeString = row.GetValue(2).Value.ToString(); var memberType = SqlType.Parse(Transaction.Context, memberTypeString); if (memberType == null) { throw new InvalidOperationException(String.Format("Cannot find the type '{0}' for member '{1}' of type '{2}'.", memberTypeString, memberName, typeName)); } typeInfo.AddMember(memberName, memberType); } } } userType = new UserType(typeInfo); typesCache[typeName] = userType; } return(userType); }
private static void CreateUserType(IQuery query) { var typeName = ObjectName.Parse("APP.test_type"); var typeInfo = new UserTypeInfo(typeName); typeInfo.AddMember("a", PrimitiveTypes.String()); typeInfo.AddMember("b", PrimitiveTypes.Integer()); query.Access().CreateType(typeInfo); }