Наследование: IObjectInfo
Пример #1
0
        public bool AlterType(UserTypeInfo typeInfo)
        {
            if (!DropType(typeInfo.TypeName))
                return false;

            CreateType(typeInfo);
            return true;
        }
Пример #2
0
        public UserType(UserTypeInfo typeInfo)
            : base(typeInfo.TypeName.FullName, SqlTypeCode.Type)
        {
            if (typeInfo == null)
                throw new ArgumentNullException("typeInfo");

            TypeInfo = typeInfo;
        }
Пример #3
0
        public UserType(UserTypeInfo typeInfo)
            : base(typeInfo.TypeName.FullName, SqlTypeCode.Type)
        {
            if (typeInfo == null)
            {
                throw new ArgumentNullException("typeInfo");
            }

            TypeInfo = typeInfo;
        }
Пример #4
0
        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;
        }
Пример #5
0
        public bool AlterType(UserTypeInfo typeInfo)
        {
            if (!DropType(typeInfo.TypeName))
            {
                return(false);
            }

            CreateType(typeInfo);
            return(true);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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();
            }
        }
Пример #9
0
        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();
            }
        }
Пример #10
0
        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;
        }
Пример #11
0
 public static void TestSetUp()
 {
     var typeInfo = new UserTypeInfo(ObjectName.Parse("APP.test_type"));
     typeInfo.AddMember("a", PrimitiveTypes.Integer());
     Type = new UserType(typeInfo);
 }
Пример #12
0
        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);
        }
Пример #13
0
        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;
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }