KR101440615B1 - 사용자 정의 타입들에 대한 계승을 지원하기 위한 시스템및 방법 - Google Patents
사용자 정의 타입들에 대한 계승을 지원하기 위한 시스템및 방법 Download PDFInfo
- Publication number
- KR101440615B1 KR101440615B1 KR1020057010948A KR20057010948A KR101440615B1 KR 101440615 B1 KR101440615 B1 KR 101440615B1 KR 1020057010948 A KR1020057010948 A KR 1020057010948A KR 20057010948 A KR20057010948 A KR 20057010948A KR 101440615 B1 KR101440615 B1 KR 101440615B1
- Authority
- KR
- South Korea
- Prior art keywords
- type
- user
- delete delete
- defined type
- database
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 109
- 238000003860 storage Methods 0.000 claims description 18
- 230000014509 gene expression Effects 0.000 claims description 9
- 239000003471 mutagenic agent Substances 0.000 claims description 9
- 238000011156 evaluation Methods 0.000 claims description 5
- 230000002085 persistent effect Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 17
- 238000007726 management method Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 11
- 230000006399 behavior Effects 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 9
- 230000003287 optical effect Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 230000006855 networking Effects 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000010354 integration Effects 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000005266 casting Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 229920001690 polydopamine Polymers 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 238000005315 distribution function Methods 0.000 description 1
- 238000009429 electrical wiring Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000036571 hydration Effects 0.000 description 1
- 238000006703 hydration reaction Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/289—Object oriented databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/10—Services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Tourism & Hospitality (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Economics (AREA)
- Mathematical Physics (AREA)
- Human Resources & Organizations (AREA)
- Marketing (AREA)
- Primary Health Care (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
본 발명의 다양한 실시예들은 그 자체와 다른 사용자 정의 타입(서브타입 또는 슈퍼타입/베이스 타입 중 어느 하나)간의 계승 관계를 기술하기 위한 정보는 물론 그 구조를 설명하기 위한 정보를 포함하는 적어도 하나의 사용자 정의 타입에 대해 확장가능한 타입 시스템을 가진 데이터베이스에 관한 것이다. 임의 실시예들의 경우, 사용자 정의 타입은 예를 들면, CLR(Common Language Runtime) 명령문, C, C++ 및 C#("C-sharp")의 명령문 및/또는 버추얼 베이직 명령문과 같은 SQL(Squential Quary Language) 명령문 이외의 것으로 정의된다. 소정 경우에, 몇몇 실시예들은 데이터베이스가 상기 데이터베이스를 이용하여 사용자 정의 타입들의 명백한 등록에 의해 2개의 사용자 정의 타입들간의 계승 관계를 인식하고 있는 시스템에 관한 것이다.
사용자 정의 타입, 데이터베이서, 서브타입, 슈퍼타입, 베이스타입
Description
<관련 출원에 대한 상호 참조>
본 출원은 2004년 2월 10일자로 출원된 일부 계속 미국 특허 출원 제10/775,282호(사건 관리번호 MSFT-3029)의 우선권을 주장하는, 2004년 5월 3일자로 출원된 미국 출원 제10/837,929호에 대한 우선권을 주장하며, 그 개시는 전체적으로 참조로서 본 명세서에 결합된다.
본 출원은 다음의 공통으로 할당된 출원들에 개시된 발명에 대한 과제와 관련되며, 그 내용은 전체로서 본 출원에 결합된다: 2003년 8월 21일자로 출원된 "SYSTEMS AND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUT INDEPENENT OF PHYSICAL REPRESENTATION"이라는 표제의 미국특허출원 제10/647,058(사건 관리번호 MSFT-1748); 2003년 8월 21일자로 출원된 "SYSTEMS AND METHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICAL ORGANIZATION"이라는 표제의 미국특허출원 제10/646,941호(사건 관리번호 MSFT-1749); 2003년 8월 21일자로 출원된 "SYSTEMS AND MEHTODS FOR THE IMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM"이라는 표제의 미국특허출원 제10/646,940호( 사건 관리번호 MSFT-1750); 2003년 8월 21일자로 출원된 "SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A CORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY HARDWARE/SOFTWARE INTERFACE SYSTEM"이라는 표제의 미국특허출원 제10/646,632호(사건 관리 번호 MSFT-1751); 2003년 8월 21일자로 출원된 "SYSTEMS AND METHOD FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM"이라는 표제의 미국특허출원 제10/646,645호(사건 관리번호 MSFT-1752); 2003년 8월 21일자로 출원된 "SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM"이라는 표제의 미국특허출원 제10/646,575호(사건 관리번호 MSFT-2733); 2003년 8월 21일자로 출원된 "STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA"라는 표제의 미국특허출원 제10/646,646호(사건 관리번호 MSFT-2734); 2003년 8월 21일자로 출원된 "SYSTEMS AND METHODS FOR DATA MODELING IN AN ITEM-BASED STORAGE PLATFORM"이라는 표제의 미국특허출원 제10/646.580호(사건 관리번호 MSFT-2735).
본 발명은 컴퓨터 시스템에서의 데이터 저장에 관한 것으로, 특히 UDT들이 특정 계약을 수행하는 관리 타입을 등록함으로써 데이터 저장의 스칼라 타입 시스템(들)을 연장하는 관련 데이터베이스 엔진들 및 파일 시스템들과 관련하여 사용되는 확장가능한 메카니즘인 데이터베이스 시스템내의 사용자 정의 타입들(UDTs)에 대한 계승을 제공하기 위한 시스템들 및 방법들에 관한 것이다.
MICROSOFT SQL SERVER는 광대한 관리 및 개발 도구들, 강력한 추출, 변형, 및 로딩(ETL) 도구, 비지니스 지능 및 분석 서비스 및 다른 성능을 제공하는 포괄적인 데이터베이스 관리 플랫폼이다. 다른 개선사항 중에는, MICROSOFT WINDOWS.NET 프레임워크 공통 언어 런타임(CLR)이 최근에 SQL SERVER 데이터베이스에 통합되었다.
CLR은 MICROSOFT.NET 프레임워크의 핵심이며, 모든 .NET 코드에 대한 실행 환경을 제공한다. 따라서, CLR내에서 실행되는 코드는 "관리 코드(magaged code)"로서 참조된다. CLR은 프로그램 실행에 필요한 다양한 기능 및 서비스들을 제공하고, JIT(just-in-time) 편집을 포함하고, 메모리를 할당 및 관리하고, 타입 안전, 예외 조작, 쓰레드 관리(thread management) 및 보안을 강화한다. CLR은 .NET 루틴의 제1 호출(invocation)시 SQL SERVER에 의해 로딩된다.
SQL SERVER의 이전 버전에서, 데이터베이스 프로그래머들은 서버측상에 코드를 기입할 때 Transact-SQL을 사용하는데 제한되었다. Transact-SQL은 국제표준기구(ISO) 및 ANSI(American National Standards Institute)에 의해 정의된 SQL(Structured Query Language)의 확장이다. Transact-SQL을 이용하여, 데이터베이스 개발자들은 데이터베이스들 및 테이블들을 생성, 변형 및 삭제할 수 있음은 물론, 데이터베이스에 저장된 데이터를 삽입, 검색, 변형 및 삭제할 수 있다. Transact-SQL은 다이렉트 구조적 데이터 억세스 및 조정에 대해 구체적으로 설계된다. Transact-SQL이 구조적 데이터 억세스 및 관리면에서 뛰어나지만, VISUAL BASIC.NET 및 C#과 같이 충분한 기능을 갖춘 프로그래밍 언어는 아니다. 예를 들면, Transact-SQL은 각 루프, 비트 시프팅 또는 클래스에 대해 어레이, 수집을 지원하지 않는다.
SQL SERVER 데이터베이스에 통합된 CLR을 이용함으로써, 데이터베이스 개발자들은 Transact-SQL 단독으로 달성하기 불가능하거나 어려웠었던 작업들을 수행할 수 있게 되었다. VISUAL BASIC.NET 및 C# 둘다 어레이, 구조화된 예외 조작 및 수집에 대한 완벽한 지원을 제공하는 현대적인 프로그래밍 언어이다. 개발자들은 VISUAL BASIC.NET 및 C#과 같은 언어들을 이용하여 보다 복잡한 로직을 가지며 연산 작업들에 보다 적합한 코드를 기입하는 CLR 통합에 영향을 줄 수 있다. 이들 프로그래밍 언어들은 캡슐화, 계승, 폴리모피즘(polymorphism)과 같은 객체 배향 력을 제공한다. 관련 코드는 클래스 및 명칭공간에 쉽게 편성될 수 있다.
관리 코드는 숫자 처리(number crunching) 및 복잡한 실행 로직에 대한 Transact-SQL보다 적합하고, 많은 복잡한 작업들에 대한 광범위한 지원에 특징이 있으며, 스트링 조작 및 일반 표현을 포함한다. .NET 프레임워크 BCL(Base Class Library)에서 발견된 기능성을 이용하여, 데이터베이스 개발자들은 임의의 저장된 절차, 트리거 또는 사용자 정의 함수로부터 쉽게 억세스될 수 있는 수천의 미리설정된 클래스 및 루틴에 대한 억세스를 한다.
관리 코드의 다른 이득은 타입 안전성이다. 관리 코드가 실행되기 전에, CLR은 코드가 안전한지를 검증한다. 이 프로세스는 "검증(verification)"으로서 알려져 있다. 검증하는 동안, CLR은 몇가지 체크를 수행하여 코드가 실행하기에 안전한지를 보장한다. 예를 들면, 코드는 기입되지 않았던 어떠한 메모리도 판독되지 않았는지를 체크한다. CLR은 또한 버퍼 오버플로우를 방지할 것이다.
관리 코드를 기입할 때, 개발 유닛은 어셈블리라고 불리운다. 어셈블리는 DLL(dynamic link library)로서 패키지된다. 관리 DLL 어셈블리들은 SQL SERVER에 로딩되며 이에 의해 호스트(host)될 수 있다. CREATE ASSEMBLY 표현은 서버내의 어셈블리를 등록하는데 사용된다. 다음은 그 예이다:
CREATE ASSEMBLY YukonCLR
FROM 'C:\MYDBApp\YukonCLR.dll'
이 예에서, FROM 절은 로딩될 어셈블리의 패스명을 특정한다.
SQL SERVER는 정수, 부동 소수점 수, 일자, 시간 및 문자 스트링과 같은 "빌트-인(bulit-in)" 스칼라 타입을 전통적으로 지원하였다. 이들 빌트-인 타입들은 또한 한 세트의 빌트-인 동작, 예컨대 +,-,*,/는 물론 이들 타입들에 대한 빌트-인 함수와 함께 온다. 이들 타입, 동작 및 함수들은
그들이 곱에 의해 수행되며 패키지되고 사용자들이 그들 자신의 타입을 정의할 수 없다는 의미에서 "빌트-인"이다.
사용자들이 데이터베이스 시스템에서 스칼라 타입들로서 작용하지만 보다 복잡한 구조 및 행위를 포함하는 -예를 들면, X 및 Y 좌표로 이루어진 "포인트(Point)" 타입을 생성하는 새로운 타입을 생성할 수 있도록 사용자들이 데이터베이스 시스템의 타입 시스템을 확장할 수 있게 하는 SQL SERVER와 같은 데이터 시스템이 적합하다. 이에 관련하여, SQL 표준 및 일부 DBMS(database management system) 제품은 용어 "사용자-정의 타입"을 사용하여 몇가지 형태의 타입 확장성을 기술한다. 예를 들면, SQL-99 표준은 현존 SQL 빌트-인 데이터 타입의 값인 내부 표현을 갖는 사용자에 의해 정의될 수 있는 타입인 "개별 타입(distinct type)"을 기술한다. 개별 타입은 현존 스칼라 타입을 가지고 비교 및 산술 조작자들, 타입 변환 및 통합(컬럼) 함수(예를 들면, 최대, 최소, 평균)를 선택적으로 공유할 수도 있다. 또한, 개별 타입은
사용자 정의 함수를 거쳐 개별 타입에 특정한 새로운 함수를 정의함으로써 현존 스칼라 타입의 것들을 벗어난 행위를 드러낼 수도 있다. 타입 체킹에 관련하여, 개별 타입 및 현존 스칼라 타입들은 상이한 타입이라고 고려된다.
개별 타입들의 주요 이점은 정의의 용이함이다. 만일 새로운 타입의 내부 표현이 현존 빌트-인 타입으로 기술될 수 있는 단일 데이터 넘버를 가지고 빌트-인 타입이 새로운 타입에 필요한 대부분의 행위를 이미 수행한다면, 개별 타입들은 매력적인 대안이다. 사용자가 타입, 시공자들(constructors), 비교 조작자들(오더링 및 인덱싱에 사용된), 산술 조작자들 및 타입 변환(캐스팅) 조작자들의 온-디스크 저장을 관리하는데 필요한 행위를 수행하는 것에 대해 걱정하지 않다도 된다. 사용자는 단지 착수중인 빌트-인 타입의 어떤 기능성이 개별 타입에 대해 노출될 필요가 있는지 그리고 새로운 타입에 대한 추가적인 기능 또는 값에 대한 제약을 추가적으로 부가할 것인지를 선택하기만 하면 된다. 개별 타입들의 다른 이점은 히스토그램의 연산과 같은 빌트-인 타입들에 활용가능한 모든 질문 프로세싱이 개별 타입들의 컬럼들에 대해 반드시 사용될 수 있다는 것이다. 그러나, 개별 타입들의 단점은 이들이 보다 복잡한 타입들을 생성하는데 쉽게 사용될 수 없다는 것이다.
SQL-99 표준은 또한 사용자에 의해 정의될 수 있는 타입이며 데이터 멤버들의 수집인 내부 표현을 갖는 "구조 타입(structured type)"을 기술하며, 이들 각각은 상이한 SQL 빌트-인 또는 사용자 정의 타입일 수도 있다. 이것은 C 및 C++에서의 구조체 포인터(struct)의 개념과 유사하다. SQL-99은 사용자는 내부 구조면에서 타입을 정의하는데에만 필요한 구조 타입들을 정의하기 위한 스타일을 기술한다. 시스템은 데이터 멤버들에 대한 억세서(accessor) 및 뮤테이터 함수, 시공자 및 타입의 인스턴스(instances)의 온-디스크 표현을 관리하는 함수를 자동적으로 생성한다.
SQL에서 정의된 바와 같은 구조 타입들의 주요 이점들은 (a) 타입의 기본적인 행위 정의의 용이함과 (b) 보다 복잡한 타입들을 정의하는 적응성이다. 그러나, 구조 타입들의 현저한 단점은 C 또는 C++과 같은 범용 프로그래밍 언어에 기입된 외부 함수들을 통해 일반적으로 정의되는 타입 특정 메소드 정의의 복잡성이다. 구조 타입을 완벽하게 정의하기 위해서, 타입의 정의자는 SQL과 일부 다른 프로그래밍 언어간의 라인을 스트레들(straddle)할 필요가 있다.
개별 타입 및 SQL 99의 구조 타입 특성이 SQL 데이터베이스의 현존 스칼라 타입 시스템을 확장할 수 있게 한다는 면에서 사용자들에게 일부 이점들을 제공하지만, 사용자가 스칼라 타입들로서 작용하지만 보다 복잡한 구조 및 행위를 포함하는 사용자 정의 타입들을 통해 데이터베이스 시스템의 스칼라 타입 시스템을 확장할 수 있게 하기 위한 향상된 시스템들 및 방법들이 필요하였다.
UDT 특허 출원에 개시된 발명은 스칼라 타입으로서 작용하지만 보다 복잡한 구조 및 행위를 포함하는 사용자 정의 타입을 생성함으로써 사용자가 데이터베이스 시스템의 스칼라 타입 시스템을 확장할 수 있게 하는 시스템 및 방법에 관한 것이다. 본 발명에 따르면, 사용자는 사용자 정의 타입의 구조를 정의하는 클래스 및 사용자 정의 타입의 인스턴스들에 대해 실행될 수 있는 방법들을 실행하는 하이레벨 프로그래밍 언어의 프로그램 코드를 기입한다. 본 명세서에서 사용되는, 용어 "구조(structure)"는, 사용자 정의 타입을 참조할 때, 타입을 실행하는 특성들 또는 필드들의 세트를 포함한다. UDT 특허 출원에서 각 필드의 타입은 스칼라 SQL 타입 또는 임의의 이전에 정의된 사용자 정의 타입일 수 있다. 다음으로, 사용자 정의 타입을 정의하는 클래스는 데이터베이스 시스템에 컴파일되어 등록된다. 구체적으로, 사용자 정의 타입을 정의하는 CLR 클래스는 CREATE ASSEMBLY 데이터 정의 표현을 통해 데이터베이스 시스템에 등록되는 어셈블리내에서 컴파일될 수도 있다. 어셈블리가 등록된 후, 사용자는 CREATE TYPE 데이터 정의 표현을 이용하여 사용자 정의 타입을 정의하는 어셈블리내에 클래스를 등록할 수 있다.
UDT 특허 출원 발명의 경우, 데이터베이스 시스템은 사용자 정의 타입이 SQL 타입 시스템에서의 스칼라로서 작용할 수 있게 하는 클래스가 실행되어야 하는 특정 계약을 실시한다. 본 명세서에서 사용된 용어 "계약(contract)"은 실행될 코드가 적당하게 실행되는 것을 보장하는 임의의 선제 조건 또는 요구사항들을 충족하는지를 체크하는 객체 중심 프로그래밍 환경에서 런타임시 사용되는 기술을 의미한다. 본 발명에 따르면, 사용자 정의 타입을 정의하는 클래스가 비교되는 것에 대한 계약은 몇가지 요구사항을 포함한다. 첫번째로, 클래스는 데이터베이스 저장내의 사용자 정의 타입의 인스턴스를 지속하기 위한 복수의 상이한 포맷들 중 하나를 특정해야만 한다. 두번째로, 클래스는 사용자 정의 타입에 대한 널 값(null value)을 리턴시킬 수 있어야만 한다. 세번째로, 클래스는 스트링 타입과 같은 다른 타입에 및 이로부터 사용자 정의 타입을 변환하기 위한 방법을 제공해야만 한다. 일단 이들 요구사항들이 충족되면, 데이터베이스 시스템은 사용자 정의 타입의 인스턴스들이 생성될 수 있게 할 수 있다. 본 출원의 일 실시예에서, 사용자 정의 타입은 테이블내의 컬럼값, 변수, 루틴의 파라미터 또는 루틴의 리턴값으로서 인스턴스화(instantiate)될 수 있다. 데이터베이스 시스템은 타입의 인스턴스를 생성하시 후속 이용에 대한 사용자 정의 타입을 정의하는 클래스에 관한 메타데이터를 저장한다. 본 발명의 다른 실시예에서, 사용자 정의 타입 계약의 검증은 타입의 정의하는 클래스를 기술하는 메타데이터를 이용하여 수행된다.
사용자 정의 타입의 인스턴스를 지속하기 위한 복수의 상이한 포맷들은 데이터베이스 시스템의 본래 포맷에 따라 자동적으로 사용자 정의 타입의 인스턴스가 시리얼화된 제1 포맷과, 사용자 인증 클래스에 의해 정의된 방식으로 사용자 정의 타입의 인스턴스가 시리얼화된 제2 포맷을 포함한다. 부가적으로, UDT 특허 출원의 발명이 MICROSOFT.NET CLR이 통합되는 MICROSOFT SQL SERVER내에서 실행될 때, MICROSOFT.NET 프레임워크에 의해 제공된 메소드에 따라 사용자 정의 타입의 인스턴스가 시리얼화된 제3 포맷이 활용가능하다.
UDT 특허 출원의 발명의 경우, 데이터베이스 시스템의 질문 언어의 표현은 표현의 평가가 사용자 정의 타입의 인스턴스에 대한 메소드의 호출(invocation)을 필요로 하도록, 사용자 정의 타입의 인스턴스(들)에 대한 하나 또는 그 이상의 참조를 포함할 수 있다. 데이터베이스 시스템이 그러한 질문 언어 표현을 수신할 때, 그 표현을, 실행될 때, 사용자 정의 타입의 인스턴스에 대한 요구 메소드를 호출하는 일련의 프로그램 코드 명령으로 번역한다. 다음으로, 데이터베이스 시스템은 질문 언어 표현의 평가 결과로서 메소드 호출(method invocation)의 결과를 리턴시킨다. 일 실시예에서, 사용자 정의 타입의 인스턴스는 인스턴스에 대한 메소드를 호출(invoking)하기 전에 역시리얼화(deserialize)된다.
본 발명의 다른 특징은 뮤테이터 메소드의 호출을 통해 사용자 정의 타입의 인스턴스의 값을 변경할 수 있는 능력이다. 구체적으로, 사용자 정의 타입을 정의하는 클래스의 저작권자는 클래스의 일부로서 뮤테이터 메소드를 포함한다. 사용자 정의 타입의 인스턴스에 대해 호출될 때, 뮤테이터 메소드는 사용자 정의 타입의 값이 변경될 수 있게 한다. 이 프로세스는 사용자 정의 타입의 인스턴스를 역시리얼화하고, 인스턴스의 역시리얼화된 데이터의 값을 변경하는 뮤테이터 메소드를 호출하고 나서 변경을 지속하는 사용자 정의 타입의 변형된 인스턴스를 시리얼화하는 것을 포함할 수도 있다.
본 발명의 다른 특징에 따르면, 사용자 정의 타입을 정의하는 클래스는 사용자 정의 타입의 인스턴스의 시리얼화된 2진수 표현이 2진 차수가 될 것을 특정하는 속성을 더 포함할 수도 있다. 이것은 타입의 인스턴스에 대해 2진수 비교가 이루어질 수 있게 하며 또한 타입의 인스턴스에 대해 인텍싱이 수행될 수 있다. 구체 적으로, 2진 차수화되는 사용자 정의 타입의 인스턴스의 경우, 타입의 2개의 인스턴스들의 일부 비교를 필요로 하는 질문 언어 표현이 데이터베이스 시스템에 의해 수신될 때(예를 들면, >,<, 또는 =), 2개의 인스턴스들의 시리얼화된 2진 표현들은 인스턴스를 역시리얼화하지 않고, 표현을 평가하는데 사용될 수 있다. 부가적으로, 2진수 차수화된 사용자 정의 타입의 경우, 사용자 정의 타입으로서 정의된 컬럼을 갖는 데이터베이스 저장의 테이블이 생성될 수 있다. 다음으로, 인덱스는 컬럼상에 생성될 수 있다. 인덱스는 또한 사용자 정의 타입을 참조하는 질문 언어 표현을 통해 생성될 수 있다. 이 경우, 연산된 컬럼은 표연을 통해 첫번째로 생성되고나서 인덱스는 연산된 컬럼을 통해 생성된다.
<요약>
본 발명의 다양한 실시예들은 계승을 지원하는 UDT 프레임워크를 확장하는 것에 관한 것이다. 계승은 객체 중심 프로그래밍의 키 테넷들(key tenet) 중 하나이며 가장 현대적인 타입시스템들(예를 들면, CLR 타입시스템 또는 XSD 타입시스템)에 대한 기본적인 빌딩 블럭이다. 이 확장을 이용하여, 저장의 객체 데이터 모델링 능력들은 크게 향상된다. 관련 매핑 기술들에 대한 귀찮으면서도 느린 객체에 대한 필요성없이 데이터베이스 타입 시스템에 CLR(commone language runtime) 타입시스템으로부터 자연스러운 매핑을 할 수 있다. 질문 언어에서 계승에 관련된 개념들을 지원하는 것은 계승에 대한 SQL 프로그래밍 모델을 크게 간략화한다.
사용자 정의 타입들에 대한 계승이 다른 데이터베이스 제품들에서 수행되었지만, 본 발명의 다양한 실시예들은 현존 분야세서 존재하지 않는 하나 또는 그 이 상의 다음 능력들을 소유한 UDT 계승 솔루션에 관한 것이다.
·CLR 타입시스템을 이용한 일정한 통합. 본 발명의 몇가지 실시예들은 기본적인 UDT 계약이 한 세트의 필요한 커스텀 속성들과 관리 타입에 대한 인터페이스들로서 특정되는 UDT 계승 시스템 및 방법들에 관한 것이며, 여기서 계승은 동일한 개념을 확장시키며 SQL 타입시스템에 대한 계승의 상세를 구동하기 위해 관리 타입 정의를 사용한다. 이 솔루션은 개발자가 C#, C++ 및 VB.NET을 포함하지만 이에 국한되지 않는, 그들 선택의 임의의 CLS-적응 프로그래밍 언어로 계승된 타입들을 기술할 수 있게 한다.
·대체에 대한 완벽한 지원. 본 발명의 몇가지 실시예들의 경우, 만일 사이트(변수, 파라미터, 컬럼 정의 등)가 특정 UDT라고 선언되는 경우, 그 UDT의 임의의 서브타입들의 값은 그 사이트에 저장될 수 있다. 대체의 의미는 캐스팅, 변환, 할당 및 메소드 호출을 포함하는 타입의 모든 이용을 확장하는 것은 물론, 이 방식으로 클라이언트 어플리케이션에 의해 결과 세트가 처리된다
·인덱싱 및 질문 서브시스템을 이용한 깊은 통합. 본 발명의 수많은 실시예들의 경우, 계승에는 선언된 타입과는 상이할 수 있는 값의 정확한 런타임 타입의 개념이 부가된다. 예를 들면, SQL Server는 이 종류의 정보를 통해 인덱스들의 생성을 지원하고, 또한 값의 타입에 기초하여 술어의 인덱스를 이용한다. 계승은 또한 서브타입들로 재정의(번복)될 수 있는 가상의 행위들의 개념을 추가할 것이며, 이 개념은 특정 UDT 함수의 인덱스의 연산에 대입될 수도 있으며 타입 생성시에 검증될 수도 있다.
·질문가능한 메타데이터 및 카탈로그 서비스. 본 발명의 다양한 실시예들의 경우, 타입 및 그 슈퍼-타입간의 관계는 타입 생성시에 메타데이터에 기록되고 질문가능한 카탈로그 뷰를 통해 활용가능하다. 본 출원은 특정 타입의 대체가능한 범위를 결정하는 질문들을 포함한다.
이에 관련하여, 본 발명의 일 실시예는
그 구조를 기술하기 위한 정보는 물론 그 자신과 다른 사용자 정의 타입(서브타입 또는 슈퍼타입/기본 타입 중 어느 하나)간의 계승 관계를 기술하기 위한 정보를 포함하는 적어도 하나의 사용자 정의 타입에 대한 확장가능한 타입 시스템을 이용한 데이터베이스에 관한 것이다. 임의 실시예의 경우, 사용자 정의 타입은 예를 들면, CLR(Common Language Runtime) 명령문, C, C++, 및 C#("C-sharp")의 명령문, 및/또는 버추얼 베이직 명령문과 같은 SQL 명령문 이외의 어떤 것으로 정의된다. 어떤 경우에도, 몇가지 실시예들은 데이터베이스가 2개의 사용자 정의 타입들(하나는 서브타입이고 다른 하나는 슈퍼타입/베이스 타입)간의 계승 관계를 인식하는 시스템에 관한 것이다.
임의 실시예의 경우, 데이터베이스는 상기 데이터베이스를 이용하여 사용자 정의 타입의 명백한 등록에 의해 2개의 사용자 정의 타입들간의 상기 계승 관계를 인식한다. 이에 관련하여, 몇가지 실시예들에 대한 본 발명의 한가지 중요한 방법은 (a) 타입을 에셈블리로 번역하고; (b) 상기 데이터베이스를 이용하여 상기 어셈블리를 등록하고; (c) 상기 데이터베이스를 이용하여 상기 어셈블리의 타입을 등록하며; (d) 상기 타입을 이용하는 것을 포함한다.
상술한 요약은 물론 바람직한 실시예들의 다음 상세 설명은 첨부된 도면들과 결합하여 읽게 될 때 이해하기 용이할 것이다. 본 발명의 설명을 위해, 본 발명의 예시적인 구성이 도면들에 나타냈으며, 본 발명은 개시된 특정 방법들 및 수단들에 국한되지 않는다.
도 1은 본 발명의 양상들이 결합될 수도 있는 컴퓨터 시스템을 나타낸 블럭도이다.
도 2는 본 발명이 실행될 수도 있는 다양한 컴퓨팅 디바이스들을 갖는 예시적인 네트워크 환경을 나타낸 블럭도이다.
도 3은 관리 코드로 인스턴스화된 사용자 정의 타입의 인스턴스의 시리얼화 및 역시리얼화를 도시한 블럭도이다.
도 4는 SqlUserDefinedType에 대한 특성의 비포괄 리스트를 도시한 테이블이다.
도 5는 어드레스가 타입인 경우, 그리고 US어드레스가 어드레스의 서브타입인 경우, 어드레스가 타입 어드레스의 컬럼 addrcol을 가진 테이블일 수도 있다는 것을 나타내는 의사 코드(pseudo-code)이다.
도 6은 역시리얼화된 값의 정확한 타입을 이용하여 역시리얼화되어야 하는 CLK 타입을 결정하는 클라이언트/서버 역시리얼화기를 도시한 의사 코드이다.
도 7은 CONVERT, CAST 및 TREAT 명령에 대한 행위 및 세만틱들을 도시한 테이블이다.
도 8은 UDT 메소드들이 포함할 수도 있는 루틴 특성들을 도시한 테이블이다.
본 발명의 과제는 법정 요구사항에 부합되도록 상세히 기술된다. 그러나, 그 설명은 본 특허의 범위를 제한하려는 것은 아니다. 또한, 발명자들은 청구된 과제가 또한 본 기술 또는 미래의 기술들과 결합하여, 본 서류에 기술된 것과 유사한 상이한 단계들 또는 구성요소들을 포함하는, 다른 방식들로 구현될 수 있다는 것을 고려했다. 게다가, 이용된 방법들의 상이한 양상들을 암시하는 용어 "단계(step)"가 본 명세서에서 사용될 수도 있지만, 이 용어는 개별 단계들의 순서가 명확하게 기술될 때를 제외하고 그리고 이러한 때가 아닌 한 본 명세서에서 다양한 단계들간에 또는 이 단계들 중에 임의의 특정 순서를 포함하는 것으로서 해석되지 않아야 한다.
이하에 기술된 실시예에서, 본 발명의 상술한 특징들은 MICROSOFT SQL SERVER 데이터베이스 시스템에서 수행되는 것으로서 기술된다. 상술한 바와 같이, SQL SERVER는 MICROSOFT.NET CLR(Common Language Runtime)과 결합되어 SQL SERVER 데이터베이스의 데이터 저장에 따라 관리 코드가 동작 실행되고 기입되도록 할 수 있다. 이하 기술된 실시예는 이와 관련해서 동작하지만, 본 발명이 SQL SERVER 제품에서의 수행에 국한되는 것은 아니라는 것을 알 수 잇다. 더욱이, 본 발명은 객체 관련 확장을 갖는 간련 데이터베이스 시스템 및 객체 중심 데이터베이스와 같은, 데이터베이스 저장에 따라 동작하는 객체 중심 프로그래밍 코드의 실행을 지원하는 임의의 데이터베이스 시스템에서 수행될 수 있다. 따라서, 본 발명은 이하에 기술되는 특정 실시예에 국한되지 않지만, 첨부된 청구항들에 의해 정의되는 바와 같이 본 발명의 기술적 사상 및 범위내에 있는 모든 변형들을 커버한다는 것을 알 수 있다.
컴퓨터 환경
본 발명의 수많은 실시예들은 컴퓨터 상에서 실행될 수도 있다. 도 1 및 다음 설명은 본 발명이 수행될 수도 있는 적당한 컴퓨팅 환경의 간략한 일반 설명을 제공하려는 것이다. 요구되지는 않지만, 본 발명은 클라이언트 워크스테이션 또는 서버와 같은, 컴퓨터에 의해 실행되는 컴퓨터 모듈과 같은 컴퓨터 실행가능 명령들의 일반적으로 관련하여 기술될 것이다. 일반적으로, 컴퓨터 모듈들은 특정 작업을 수행하거나 특정 추상 데이터 타입을 수행하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 게다가, 본 분야의 숙련된 자라면, 본 발명은 휴대용 디바이스, 멀티 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능한 소비자 전자기기, 네트워크 PC들, 마이크로컴퓨터, 메인프레임 컴퓨터 등을 포함하는 다른 컴퓨터 시스템 구성들을 가지고 실시될 수도 있다는 것을 알 수 있을 것이다. 본 발명은 통신 네트워크를 통해 링크되는 원격 처리 디바이스에 의해 작업들이 수행되는 분배 컴퓨팅 환경에서 실시될 수도 있다. 분배 컴퓨팅 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 디바이스 둘다에 위치될 수도 있다.
도 1에 나타난 바와 같이, 예시적인 범용 컴퓨팅 시스템은 프로세싱 유닛(21), 시스템 메모리(22) 및 시스템 메모리를 포함하는 다양한 시스템 컴포넌트들을 프로세싱 유닛(21)에 결합시키는 시스템 버스(23)를 포함하는, 종래의 개인용 컴퓨터(20) 등을 포함한다. 시스템 버스(23)는 메모리 버스 또는 메모리 제어기, 주변 버스 및 다양한 버스 구조들 중 어느 하나를 이용하는 로컬 버스를 포함하는 임의의 몇가지 타입의 버스 구조들일 수도 있다. 시스템 메모리는 ROM(24) 및 RAM(25)를 포함한다. 구동하는 동안과 같은, 개인용 컴퓨터(20)내의 구성요소들간의 정보를 전송하도록 돕는 기본 루틴들을 포함하는 BIOS(basic input/output system)(26)은 ROM(24)에 저장된다. 개인용 컴퓨터(20)는 도시되지 않은 하드 디스크로부터 판독하고 하드 디스크에 기록하기 위한 하드 디스크 드라이브(27), 착탈식 자기 디스크(29)로부터 판독하거나 이 디스크에 기록하기 위한 자기 디스크 드라이브(28), 및 CD-ROM 또는 다른 광학 매체와 같은 착탈식 광 다스크(31)로부터 판독하거나 이 디스크에 기록하기 위한 광 디스크 드라이브(30)를 더 포함할 수도 있다. 하드 디스크 드라이브(27), 자기 디스크 드라이브(28) 및 광 디스크 드라이브(30)는 각기 하드 디스크 드라이브 인터페이스(32), 자기 디스크 드라이브 인터페이스(33) 및 광 드라이브 인터페이스(34)에 의해 시스템 버스(23)에 접속된다. 드라이브들 및 그들과 관련된 컴퓨터 판독가능 매체는 컴퓨터 판독가능 명령들, 데이터 구조, 프로그램 모듈 및 개인용 컴퓨터(20)에 대한 다른 데이터의 불휘발성 저장을 제공한다. 본 명세서에서 기술된 예시적인 환경이 하드 디스크, 착탈식 자기 디스크(29) 및 착탈식 광 디스크(21)를 사용할지라도, 자기 카세트, 플래쉬 메모리 카드, 디지털 비디오 디스크, 베르누이 카트리지, RAM, ROM 등과 같은 컴퓨터에 의해 억세스가능한 데이터를 저장할 수 있는 다른 타입의 컴퓨터 판독가능 매체가 예시적인 구동 환경에서 사용될 수도 있다는 것을 본 분야의 숙련된 자라면 이해할 것이다.
다수의 프로그램 모듈은 구동 시스템(35), 하나 이상의 어플리케이션 프로그램(36), 다른 프로그램 모듈(37) 및 프로그램 데이터(38)를 포함하는, 다수의 프로그램 모듈은 하드 디스크, 자기 디스크(29), 광 디스크(31), ROM(24) 또는 RAM(25)에 저장될 수도 있다. 사용자는 키보드(40) 및 포인팅 디바이스(42)와 같은 입력 디바이스들을 통해 명령들 및 정보를 개인용 컴퓨터(20)에 입력할 수도 있다. 다른 입력 디바이스들(미도시됨)은 마이크로폰, 조이스틱, 게임 패드, 위성 디스크, 스캐너 등을 포함할 수도 있다. 이들 및 다른 입력 디바이스들은 시스템 버스에 결합되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus)와 같은 인터페이스들에 의해 접속될 수도 있는 시리얼 포트 인터페이스(46)를 통해 프로세싱 유닛(21)에 종종 접속된다. 모니터(47) 또는 다른 타입의 디스플레이 디바이스는 또한 비디오 어댑터(48)와 같은 인터페이스를 통해 시스템 버스(23)에 접속된다. 모니터(47)에 부가하여, 개인용 컴퓨터는 통상적으로 스피커 및 프린터와 같은 다른 주변 출력 디바이스들(미도시됨)을 포함한다. 도 1의 예시적인 시스템은 또한 호스트 어댑터(55), SCSI(Small Computer System Interface) 버스(56) 및 이 SCSI 버스(56)에 접속된 외부 저장 디바이스(62)를 포함한다.
개인용 컴퓨터(20)는 원격 컴퓨터(49)와 같은 하나 이상의 원격 컴퓨터들에 대한 로컬 접속을 이용하여 네트워크화된 환경에서 동작할 수도 있다. 원격 컴퓨터(49)는 다른 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어(peer) 디바이스 또는 다른 공통 네트워크 노드일 수 있으며, 통상적으로 메모리 저장 디바이스(50)만이 도 1에 도시되었지만 개인용 컴퓨터(20)에 상대적인 상술한 많은 구성요소들 또는 많은 모든 구성요소들을 포함한다. 도 1에 도시된 로직 접속들은 근거리 통신망(LAN)(51) 및 광역 통신망(WAN)(52)를 포함한다. 이러한 네트워킹 환경들은 사무소, 기업 와이트 컴퓨터 네트워크, 인트라넷 및 인터넷에서는 진부한 것이다.
LAN 네트워킹 환경에서 사용될 때, 개인용 컴퓨터(20)는 네트워크 인터페이스 또는 어댑터(53)를 통해 LAN(51)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 개인용 컴퓨터(20)는 통상적으로 인터넷과 같은 광역 통신망(52)을 통해 통신을 설정하기 위한 다른 수단 또는 모뎀(54)을 포함한다. 내장형 또는 외장형일 수도 있는 모뎀(54)은 시리얼 포트 인터페이스(46)를 통해 시스템 버스(23)에 접속된다. 네트워크화된 환경에서, 개인용 컴퓨터(20)에 상대적으로 도시된 프로그램 모듈, 또는 그 부분들은 원격 메모리 저장 디바이스에 저장될 수도 있다. 도시된 네트워크 접속들은 예시적이며 컴퓨터들간의 통신 링크를 설정하는 다른 수단이 사용될 수도 있다는 것을 이해할 것이다.
본 발명의 수많은 실시예들은 컴퓨터화된 시스템에 특히 적합하게 되어 있다고 생각되지만, 본 명세서에서 어떠한 것도 그러한 실시예에 본 발명이 국한되는 것을 의미하는 것은 아니다. 이와는 대조적으로, 본 명세서에서 사용되는 용어 "컴퓨터 시스템"은 디바이스들이 사실상 전자, 기계, 논리 또는 버츄얼인지에 무관하게, 정보를 저장 및 처리할 수 있으며/또는 디바이스 자체의 행위 또는 실행을 제어하는 저장된 정보를 이용할 수 있는 임의의 그리고 모든 디바이스들을 포함하는 것을 의미한다.
네트워크 환경
도 2는 예시적인 네트워크화된 또는 분배 컴퓨팅 환경의 개략적인 도면을 제공한다. 분배 컴퓨팅 환경은 컴퓨팅 오브젝트(10a, 10b, 등)와 컴퓨팅 오브젝트 또는 디바이스들(110a, 110b, 110c 등)을 포함한다. 이들 오브젝트는 프로그램, 메소드, 데이터 저장, 프로그램가능한 로직 등을 포함할 수도 있다. 오브젝트들은 PDA들, 텔레비젼들, MP3 플레이어들, 개인용 컴퓨터들 등과 같은 동일 또는 상이한 디바이스들의 부분을 포함할 수도 있다. 각 오브젝트는 통신 네트워크(14)를 통해 다른 오브젝트와 통신할 수 있다. 이 네트워크는 자체적으로 다른 컴퓨팅 오브젝트들과 도 2의 시스템에 서비스를 제공하는 컴퓨팅 오브젝트들과 컴퓨팅 디바이스들을 포함할 수도 있으며, 자체적으로 다중 상호접속 네트워크를 나타낼 수도 있다. 본 발명의 일 양상에 따르면, 각 오브젝트(10a, 10b, 등 또는 110a, 110b, 110c 등)는 API, 또는 다른 오브젝트, 소프트웨어, 펌웨어 및/또는 하드웨어를 이용하여 본 발명의 방법들을 수행하는데 사용된 프로세스의 이용을 요청하는 어플리케이션을 포함할 수도 있다.
또한, 110c와 같은 오브젝트는 다른 컴퓨팅 디바이스(10a, 10b 등 또는 110a, 110b 등)에 대해 호스트될 수도 있다는 것을 이해할 수 있다. 따라서, 도시된 물리적 환경이 컴퓨터들로서 접속된 디바이스를 나타낼 수도 있다고 할지라도, 그러한 도시는 단지 예시적인 것이며 PDA들, 텔레비젼, MP3 플레이어 등과 같은 다양한 디지털 디바이스들, 인터페이스들, COM 오브젝트들과 같은 소프트웨어 오브젝트 등을 포함하는 물리적 환경이 대안적으로 도시되거나 기술될 수도 있다.
분배 컴퓨팅 환경을 지원하는 다양한 시스템, 컴포넌트들 및 네트워크 구성들이 있다. 예를 들면, 컴퓨팅 시스템들은 로컬 네트워크 또는 광역 분배 네트워크에 의해, 유선 또는 무선 시스템에 의해 함께 접속될 수도 있다. 현재, 수많은 네트워크들은 광역 분배 컴퓨팅에 대한 기반을 제공하며 많은 상이한 네트워크를 포함하는 인터넷에 결합된다. 그러한 임의의 기반들은 본 발명에 따른 예시적인 통신에 이용될 수도 있다.
인터넷은 컴퓨터 네트워킹 분야에서 잘 알려져 있는, 프로토콜의 TCP/IP 슈트를 활용하는 네트워크 및 게이트웨이의 집합을 공통적으로 참조한다. TCP/IP는 "Transmission Control Protocol/Internet Protocol"에 대한 두문자어이다. 인터넷은 사용자들이 네트워크(들)를 통해 정보를 상호작용 및 공유할 수 있게 하는 네트워킹 프로토콜을 실행하는 컴퓨터들에 의해 상호접속된 지형학적으로 분배된 원격 컴퓨터 네트워크의 시스템으로서 기술될 수 있다. 그러한 광범위한 정보 공유로 인해, 인터넷과 같은 원격 네트워크들은 개발자들이 필수적으로 제약없이, 특수화된 동작 또는 서비스를 수행하기 위한 소프트웨어 어플리케이션을 설계할 수 있는 오픈된 시스템에 끌어들일 수 있었다.
따라서, 네트워크 기반은 클라이언트/서버, 피어-투-피어, 또는 하이브리드 구조와 같은 네트워크 토폴로지들의 호스트를 인에이블할 수 있다. "클라이언트"는 관련되지 않는 다른 클래스 또는 그룹의 서비스들을 이용하는 클래스 또는 그룹의 멤버이다. 따라서, 컴퓨팅시, 클라이언트는 다른 프로그램에 의해 제공된 서비스를 요청하는, 프로세스, 즉 대강 한 세트의 명령 또는 작업이다. 클라이언트 프로세스는 다른 프로그램 또는 서비스 자체에 관한 임의의 작업 상세를 "아는 것(know)"없이 요청된 서비스를 활용한다. 클라언트/서버 구조에서, 특히 네트워크화된 시스템, 클라이언트는 통상적으로 다른 컴퓨터, 예를 들면, 서버에 의해 제공된 공유된 네트워크 리소스를 억세스하는 컴퓨터이다. 도 2의 예에서, 환경에 따라, 임의의 컴퓨터가 클라이언트, 서버, 또는 둘다로 고려될 수 있다고 할지라도, 컴퓨터들(110a, 110b 등)은 클라이언트들로서 고려될 수 있고 컴퓨터들(10a, 10b 등)은 서버들로서 고려될 수 있다. 임의의 이들 컴퓨팅 디바이스들은 본 발명의 사용자 정의 타입 기술들을 포함하는 방식으로 데이터를 처리할 수도 있다.
서버는 통상적으로 인터넷과 같은 원격 또는 로컬 네트워크를 통해 억세스가능한 원격 컴퓨팅 시스템이다. 클라이언트 프로세스는 제1 컴퓨터 시스템에서 액티브 상태에 있을 수 있으며, 서버 프로세스는 통신 매체를 통해 서로 통신하는 제2 컴퓨터 시스템에서 액티브 상태에 있을 수 있기 때문에, 다수의 클라이언트들이 서버의 정보 수집 능력의 이점을 취할 수 있으며 분배 기능을 제공한다. 본 발명에 따라 활용된 임의의 소프트웨어 오브젝트들은 분배 억세스 다중 컴퓨팅 디바이스들일 수도 있다.
프로토콜층에 의해 제공된 기능을 활용하는 클라이언트(들) 및 서버(들)이 서로 통신할 수도 있다. 예를 들면, HTTP(HyperText Transfer Protocol)는 WWW(World Wide Web) 또는 "Web"과 결합하여 사용되는 공통 프로토콜이다. 통상적으로, IP 어드레스와 같은 컴퓨터 네트워크 어드레스 또는 URL(Universal Resource Locator)와 같은 다른 참조는 서버 또는 클라이언트 컴퓨터들을 서로 식별하는데 사용될 수 있다. 네트워크 어드레스는 URL 어드레스로서 참조될 수 있다. 통신은 임의 활용가능한 통신 매체를 통해 제공될 수 있다.
도 2는 본 발명이 이용될 수도 있는, 네트워크/버스를 통해 클라이언트 컴퓨터들과의 통신시 서버를 이용한, 예시적인 네트워크화된 또는 분배 환경을 도시한다. 네트워크/버스(14)는 본 발명에 따라 휴대용 컴퓨터와 같은 다수의 클라이언트 또는 원격 컴퓨팅 디바이스들(110a, 110b, 110c, 110d, 110e 등), 핸드헬드 컴퓨터, 씬 클라언트, 네트워크화된 기기, 또는 VCR, TV, 오븐, 라이트, 히터 등과 같은 다른 디바이스를 이용하는, LAN, WAN, 인트라넷, 인터넷 또는 일부 다른 네트워크 매체일 수도 있다. 따라서, 본 발명은 데이터베이스 저장에서 사용자 정의 타입을 생성하는 것이 바람직한 것에 접속하여 임의의 컴퓨팅 디바이스에 적용될 수도 있다는 것이 고려된다.
통신 네트워크/버스(14)가 인터넷인 네트워크 환경에서, 예를 들면, 서버들(10a, 10b 등)은 클라이언트들(110a, 110b, 110c, 110d, 110e 등)이 HTTP와 같은 임의의 다수의 공지된 프로토콜들을 통해 통신하는 서비들일 수 있다. 서버들(10a, 10b 등)은 분배 통신 환경의 특성일 수도 있는 바와 같이 클라이언트들(110a, 110b, 110c, 110d, 110e 등)으로서 기능할 수도 있다.
통신은 적당한 유선 또는 무선일 수도 있다. 클라이언트 디바이스들(110a, 110b, 110c, 110d, 110e 등)은 통신 네트워크/버스(14)를 통해 통신할 수도 있고 또는 통신할 수 없을 수도 있으며, 이와 관련된 독립형 통신을 가질 수도 있다. 예를 들면, TV 또는 VCR의 경우에, 그 제어에 대한 네트워크화된 양상일 수도 있고 또는 아닐 수도 있다. 각 클라이언트 컴퓨터들(110a, 110b, 110c, 110d, 110e 등)과 서버 컴퓨터(10a, 10b 등)은 다양한 어플리케이션 프로그램 모듈 또는 오브젝트들(135)을 구비할 수도 있으며, 파일들 또는 데이터 스트림들의 부분(들)이 다운로딩되고, 전송되거나 이동될 수도 있는 파일들 또는 데이터 스트림들이 저장될 수도 있는 다양한 타입의 저장 구성요소들 또는 오브젝트에 대한 접속 또는 억세스가 구비될 수도 있다. 임의의 컴퓨터(10a, 10b, 110a, 110b 등)는 본 발명에 따라 처리된 데이터를 저장하기 위한 데이터베이스, 메모리 또는 다른 저장 구성요소(20)의 유지 및 갱신을 담당할 수도 있다. 따라서, 본 발명은 컴퓨터 네트워크/버스(14)와 상호작용하며 억세스할 수 있는 클라이언트 컴퓨터들(110a, 110b 등)과 클라이언트 컴퓨터들(110a, 110b 등)과 다른 유사 디바이스들과 상호작용할 수도 있는 서버 컴퓨터들(10a, 10b, 등) 및 데이터베이스(20)을 갖는 컴퓨터 네트워크 환경에서 활용될 수 있다.
UDT 및 관리 코드
도 3은 사용자 정의 타입의 인스턴스의 시리얼화 및 역시리얼화를 도시한 블럭도이다. 도시된 바와 같이, 사용자 정의 타입의 인스턴스는 메모리의 인스턴스를 나타내는 오브젝트의 시리얼화를 통해 디스크상에 잔존한다. 어플리케이션이 UDT의 인스턴스의 메소드를 참조하는 표현 또는 술어를 포함하는 질문을 생성할 때, 잔존하는 형태의 인스턴스는 역시리얼화되고(프로세스는 또한 "수화(hydration)"으로서 참조됨) CLR은 그 저장된 값들을 수신하기 위해 풀 오브젝트에 대해 메모리를 할당한다. 다음으로 CLR은 어플리케이션 또는 사용자가 원하는 행동을 수행하는 오브젝트에 대한 적당한 메소드를 실행한다.
UDT 계승
본 명세서에서 사용된 바와 같이, 다음 용어들은 표시된 의미를 가질 것이다.
· 베이스 타입(Base Type) : 소정 타입이 슈퍼타입, 슈퍼클래스 또는 다양한 계승 모델의 적당한 조상(ancestor)으로부터 계승하며 또한 상술한 명칭으로 불리우는 타입.
· 서브 타입(Sub Type) : 베이스 타입으로서, 직접적이거나 다른 서브 타입을 통한 현재 타입을 갖는 타입.
·사이트(Site) : 관련 타입 정의를 갖는 프로그래밍 언어의 컨텍스트. 예로서 다양한 선언, 파라미터 정의, 컬럼 정의 등을 포함한다.
· 선언 타입(Declared Type) : 사이트의 "컴파일 타임(compile time)" 타입, 테이블의 컬럼의 타입 또는 함수 파라미터.
· 정확한 타입(Exact Type) : 특정값의 "런타임(runtime)" 타입. 강하게 타이핑된 시스템에서, 정확한 타입은 선언된 타입이거나, 선언된 타입의 서브 타입이다.
· 대용가능성(Substitutability) : 서브타입의 값이 베이스 타입의 값에 대해 "대용"될 수 있는 사이트의 특성. 예를 들면, 파라미터 대용가능성은 만일 함수가 특정 타입의 파라미터를 취하도록 선언되는 경우, 서브타입의 값으로 패스될 수 있어야 한다는 것을 의미한다.
본 발명의 다양한 실시예의 경우, UDT들은 SQL 서버를 이용하여 등록된 어셈블리에서 수행된 관리 타입들이다. UDT들은 테이블 정의 변수 및 파라미터를 포함하는 네이티브 타입이 사용될 수 있는 최상의 컨텍스트에 사용될 수 있다. UDT 계약에 확인된 UDT에서 정의된 메소드, 특성 및 필드들은 T-SQL로부터 실행될 수 있다.
몇가지 실시예들의 경우, UDT들은 행위를 갖는 간단한 스칼라들이라고 가정된다. 이러한 가정은 UDT들에 의해 지원되는 시리얼화 레이아웃 및 간단한 프로그래밍 모델에 반영된다. 예를 들면, 파일 시스템은 UDT 요약을 사용하여 간단한 스칼라들은 아니지만, 그 대신에 복잡한 구조 및 행위를 갖는 타입일 수 있는 "구조 타입들(structured types)"을 생성할 수도 있다.
다음 의사 코드는 본 발명의 몇가지 실시예들에 대한 서브타입의 생성을 기술한다.
CREATE TYPE [type-schema-name.]subtype-name
UNDER[type-schema-name.]base-type-name
EXTERNAL NAME assembly-name:clr-type-name
계승 계약을 설정하기 위해, 그리고 본 발명의 몇몇 실시예의 경우, UDT 저작권자는 예를 들면, SqlUserDefinedType 커스텀 속성, 그리고 전체 타입 패밀리에 적용되는 이 속성 상세 불변량에 대한 특성을 이용하여 타입 계층의 베이스 타입에 주석을 달아야만 한다. SqlUserDefinedType에 대한 특성의 비배타적 리스트는 도 4에 도시되어 있다. 다음으로, 타입 등록시, 사용자는 특정 타입이 등록되어야만 하는 베이스 SQL 타입을 표시하는 "언더(Under)" 절을 부가해야 하며, 예를 들면:
/* 슈퍼타입없이 어드레스 타입을 생성 */
create type Address
external name MyType::Address
/* 이것 하에 USAddress 서브 타입을 생성 */
create type USAddress under Address
external name MyType::USAddress
본 발명의 몇몇 실시예들의 경우, 베이스 타입 명칭은 구체적인 개요로 유효 UDT로서 등록되어야 한다. 또한, CLR 타입은 베이스 타입 명칭이 정의되는 CLR 타입의 다이렉트 서브타입이다. 서브타입은 SqlUserDefinedType 속성을 정의하지 않아야 하며, 그 모계(parent)로부터 속성을 계승하여야만 한다. 또한, 베이스 타입은 2진 차수되지 않아야만 한다. 유사하게, 베이스 타입으로 구체화된 모든 대역외 루틴 특성(SqlMethodAttribute 주석)은 서브타입 정의로 일관되어야 하며, - 구체적으로, 베이스 타입으로 정의된 모든 인덱스가능한 메소드들은 서브타입에 우선하는 서브루틴들에 대해 인덱스가능함- 이 정보는 베이스 타입으로부터 수집되며 CREATE TYPE 체크 부분으로서 서브타입의 모든 루틴들에 대해 열거함으로써 검증될 것이다.
본 발명의 다양한 실시예들의 경우, UDT 계승에 대한 프레임워크는 특성 및 그 근본적인 실행의 외부 표면적의 관점에서 기술될 수도 있다. 또한, 서브타입의 값들은 컬럼 정의의 대용가능한 것; 로컬 변수 및 배치의 파라미터 선언, 저장된 절차, 및 함수; 및 컬럼의 선언 타입 또는 임의의 서브타입들인 값들을 결과 컬럼이 포함할 수 있는 질의 결과 세트로 고려될 수 있다.
본 발명의 몇몇 실시예들의 경우, 서브타입의 인스턴스가 서브타입이라고 선언되는 컬럼에 저장되게 하는 것은 다음의 함축적인 의미를 갖는다: (a) 시리얼화 포맷은 베이스 타입 및 서브타입에 대해 동일해야만 한다; 그리고 (b) 모계에 대한 MaxByteSize 값은 서브타입의 인스턴스를 저장할 만큼 충분히 커야만 한다. 만일 불충분한 공간이라면, 실행시, 베이스 타입의 컬럼에 서브타입의 값을 저장하려는 시도는 실패할 것이며, 이러한 에러를 방지하기 위해 베이스 타입은 제한없이 정의될 수 있다.
본 발명의 다양한 실시예들의 경우, 모든 할당은 정확한 타입의 값을 저장할 수 있으며, 베이스타입의 변수에 서브타입의 값을 할당하는 것은, 정확한 타입의 값이 타겟 타입에 할당가능한 경우에만 연속하게 될 명백한 변환을, 서브타입의 변수에 베이스타입의 선언 타입을 갖는 값을 할당하는 것이 요구되는 동안 항상 연속할 것이다. 예를 들면, 만일 Address가 타입인 경우와, 만일 USAddress가 어드레스의 서브타입인 경우, Address는 도 5에 도시된 바와 같이 타입 Address의 컬럼 addrcol을 갖는 테이블일 수도 있다.
본 발명의 몇몇 실시예들에 대한 실행시, 2개의 타입들간의 계승 관계에 관한 정보는 데이터베이스의 스칼라 타입시스템의 제1 클래스 부분이고, 이 정보는 할당가능성 및 값들간의 변환을 결정하는데 사용된다. 임의 실시예들에서, IS OF 및 TREAT로 명명되는 2개의 새로운 조작자들은 스칼라 시스템에 도입되며, 이들 조작자들은 스칼라 표현 평가동안 타입 술어 및 적절한 변환을 모델링하는데 사용될 수도 있다. 공통 조작자들(예를 들면 질문의 프로젝트 리스트에서의 IS OF 술어 및 TREAT)을 추론하고 결합하는 적당한 세만틱을 인에이블하기 위해, TREAT 조작자는 질문 컴파일 동안 변형된다. 추가 최적화로서, IS OF 조작자는 계층 타입 id 면에서 재기입되어, 활용가능할 수도 있는 임의의 타입 특정 인덱스의 이점을 취할 수도 있다. UDT 표현에 접하게 되었을 때, UDT 표현 컴파일 프로세스는 발송의 본질(가상 대 정적)에 대한 어카운트로 변형되고, 파라미터 타입을 포함하는 메소드의 풀 서명에 기초한 메소드들을 명확하게 한다. 이 정보는 외부 컴파일 프로세스로부터 패스인되고 메소드 로케이션에 사용된다. 일단 이 메소드가 발견되면, 적절한 IL 명령은 정적 발송 또는 가상 메소드를 실행하는데 사용된다. 다음으로 실행시, UDT 역시리얼화 코드는 정확한 타입의 값을 사용하여 올바른 타입의 오브젝트를 생성하고 이를 지속적인 상태로 존속시킨다. 이 오브젝트는 실행 스택에 대해 푸쉬되고 이 메소드가 실행된다.
몇몇 실시예의 경우, 클라이언트/서버 역시리얼화기는 또한 역시리얼화중인 정확한 타입의 값을 이용하여 역시리얼화되어야 하는 CLR 타입을 결정한다. 만일 클라이언트가 이전에 타입을 접하지 못했다면, 복제된 접속에 대한 대역외 요구를 하여 요구에 대한 CLR에 관한 메타데이터를 다운로딩하고 이 정보를 이용하여 CLR 타입을 로케이션시킨다(도 6 참조).
몇몇 실시예의 경우, T-SQL로부터 실행된 모든 메소드들, 특성 및 필드들이 정확한 타입의 인스턴스를 동적으로 이용하지만 선언된 타입의 호출 사이트는 이용하지 않고 해결되는 것이 주어질 수도 있다. 게다가, 슈퍼타입으로 정의되며 T-SQL로부터 직접적으로 호출할 수 있는 모든 계승 메소드들, 특성들 및 필드들은 허용될 것이다. 따라서, 선언된 메소드 대 계승된 메소드를 실행하기 위한 신택스의 차이는 없을 것이다.
본 발명의 몇몇 실시예의 경우, 타겟 실행(target invocation)을 위치시키기 위한 메소드는 다음과 같이 의사 코드로 특징지워질 수 있다: 만일 D가 선언된 타입의 호출 사이트이고, M이 메소드 명칭이며, P1...Pn이 파라미터들의 타입들인 T1...Tn을 갖는 메소드에 대한 파라미터들이라면, 만일 질문이 "select<site of type D>.M(P1...Pn)"이면, 실행 메소드는 다음을 포함할 것이다:
startType = D;
Method targetMethod = null;
while (true)
{
If (startType == null)
throw new NoSuchMethodException(D, M);
Method[] methods = GetMethods(startType, M, {T1...Tn})
If (methods.Length == 0)
startType = startType.BaseType;
else if (methods.Lengh > 1)
throw new OverloadedMethodException(M);
else
{
targetMethod = methods[0];
break;
}
}
본 발명의 몇몇 실시예들에 사용된 메소드 실행에 관련하여, 메소드 명칭 매칭은 2진수 대조(binary collation)를 이용한다. 또한, 파라미터 타입 체크는 각 파라미터에 대한 CLR 타입이 SQL 파라미터 타입으로부터 함축적으로 변환가능한지를 보장한다. 게다가, 메소드 오버로딩은 만일 동일한 타입의 2개의 적당한 메소드들이 있는 경우에 허용되지 않지만, 만일 2개의 메소드들이 상이한 수의 파라미터들을 취하거나 계층이 상이한 타입으로 정의되는 경우에 허용된다. 유사하게, 만일 메소드 또는 속성이 SQL로 등록되지 않은 CLR 서브타입의 인스턴스를 리턴시키는 경우, 시스템은 실행시 에러를 일으킬 것이다. 또한, 사용된 실제 발송 명령은 해결되었던 메소드에 따라 좌우된다 -즉, 만일 발견된 메소드가 가상 또는 오버라이드 메소드로서 정의되는 경우, 가상 발송이 사용되고, 그밖에 정적 발송이 사용된다.
본 발명의 다양한 실시예들의 경우, 값이 올바른 타입이라면 타입으로부터 그 서브타입(다운캐스트)으로의 변환이 계속되는 한, 타입으로부터 그 슈퍼타입(업캐스트)로의 변환은 항상 계속될 것이며, 정확한 실패 모드가 사용된 변환 조작자에 따라 좌우되는 올바른 타입이 아니라면 변환은 실패할 것이다.
이러한 실시예들의 경우, 3개의 변환 조작자들이 있다: CONVERT, CAST 및 TREAT는 다음과 같다:
· CONVERT([schema.]type, target_type)→[schema.]type의 값 또는 변환이 실패한 경우의 에러.
· CAST([schema.]target_type으로서의 값)→[schema.]type의 값 또는 변환이 실패한 경우의 에러.
· TREAT([schema.]target_type으로서의 값)→[schema.]type의 값 또는 변환이 실패한 경우의 에러.
이들 실시예들의 경우, CAST와 CONVERT는 계승 및 대용을 이해하기 위해 변형되었던 현존 조작자들일 수도 있다. 한편, TREAT는 SQL99 컨포먼트(conformant) 신택스(SQL 표준의 §6.25)이며 슈퍼타입의 표현이 그 서브타입들 중 하나의 표현으로서 처리될 때 다운캐스팅 또는 내로윙 시나리오시 사용하기 위한 것이다(표준은 이 서브타입 처리라 칭한다). 이 조작자는 2개의 컨텍스트에서 유효하다: (a) 서브타입으로 정의되는 특성들을 억세스하는 것과; (b) 서브타입으로 정의되는 특성들을 갱신하는 것. 컴파일시, 만일 선언된 타입의 값이 target_type의 슈퍼타입이 아니라면, 에러는 보고될 것이며 TREAT는 실패할 것이다. 예를 들면:
select TREAT(person as Employee).Salary from T
where person is of (Employee)
update T
set TREAT(person as Employee).Salary = 10000
where ID = x
한편, 표준은 NULL 인스턴스에 대한 뮤테이터(mutator) 메소드를 실행하는 것을 지원하지 않으며, SQL 서버는 또한 TREAT 조작자의 결과들에 대한 제한을 강화할 것이다. 만일 TREAT가 NULL 값을 생성하는 경우, 시스템은 NULL 값을 갱신하려는 시도시 에러를 일으킬 것이다. 바꾸어 말하자면, CONVERT, CAST 및 TREAT 명령에 대한 행위 및 세만틱을 일반적으로 도시하는 도 7에 도시된 테이블에 나타난 바와 같이, 논리적으로 TREAT(type_x로서의 값)는 본 발명의 몇몇 실시예들의 경우 IF(값 IS OF type_x) THEN 값 그밖에 NULL으로 변형될 수 있다.
몇몇 실시예들의 경우, 그리고 UDT 확장의 부분으로서, SqlUserDefinedTypeAttribute 및 SqlMethodAttribute에 대한 새로운 특성은, SqlMethodAttribute를 이용하여 참값(true)으로 설정함으로써 특정 메소드에 대해 오버라이트(override)될 수 있다고 할지라도, 만일 수신기(이것)가 null값이라면 타입에 대한 메소드들이 실행되어야 하는지를 제어하는데 사용될 수도 있다. 이들 실시예들의 경우, 디폴트 값은 FALSE이다. 또한, 만일 리턴 타입의 메소드가 null가능한 타입이라면, 타입의 구별가능한 null값은 리턴된다. 만일 리턴 타입이 null 가능하다면, 타입에 대한 디폴트 clr 값은 리턴된다. 참조 타입들에 대한 디폴트 값은 null이고, 값 타입들에 대한 디폴트 값은 타입에 대한 디폴트 구성자의 호출 결과이다.
몇몇 실시예의 경우, 시스템의 모든 null 값들은 타이핑된다. 그러나, 표준으로 구체화된 타입 술어들은 값들이 null이라면 미지(unknown)로서 리턴되기 때문에, SQL로부터 특정 타입의 null값을 결정할 수 없다. 따라서, 이들 실시예들은 모든 null 값들은 선언된 타입의 호출 사이트인 것으로서 처리될 수도 있으며, 사이트에 삽입되었던 값의 정확한 타입이 아니다.
declare @emp Employee
set @emp = NULL
insert into Persons values (@emp)
select pcol from Persons - returns a null value, the type of the instance is Person
다양한 실시예들의 경우, 타입 술어는 (a) 타입의 모든 인스턴스들과 컬럼의 모든 서브타입들은 물론 컬럼의 특정 타입의 모든 인스턴스들을 지원한다(SQL99 표준의 §8.14에 설정된 바와 같이). 다음을 고려하자:
udtColumnOrValue IS [NOT] OF (type-specifier)
type-specifier ;;= [ONLY} TYPE [, type-specifier]
만일 udtColumnOrValue가 null이면, 결과는 미지이며, 그렇지 않으면 술어는 불린(boolean) 결과를 리턴시킨다.
타입 술어는 모든 스칼라 컨텍스트에 사용될 수 있으며, 여기서 불린을 생성하는 표현은 예를 들면, 단지 타입의 인스턴스와 같이 허용된다.
select convert(USAddress, addrcol) as USAaddrCol from Addresses
where addrcol is of (only USAddress);
이것은 타입의 인스턴스들과 모든 그 서브타입들에 대조된다:
select convert(USAddress, addrcol) as USAaddrCol from Addresses
where addrcol is of (USAddress);
또한, 본 발명의 몇몇 실시예들의 경우, sys.assembly_types 카탈로그 뷰는 다음과 같은 하나의 추가적인 컬럼을 가질 것이다.
base_type_id | int | The user_type_id of my basetype |
또한, 본 발명의 수많은 실시예들의 경우, 가상 메소드가 서브타입에서 오버라이드될 때, 오버라이드 실행은 베이스 메소드에서 특정화된 루틴 특성들에 대해 대용가능해야만 한다. 이 매트릭스는 타입 등록시에 체크되며 에러는 유효 조합이 검출되는 경우에 생성된다. 여기서 가이드 원리들은 서브타입 실행이 베이스 메소드의 인덱스가능성을 깨지 않아야 한다는 것이다. 따라서, 만일 베이스 메소드 정의가 인덱스가능하다면, 오버라이드 실행은 또한 인덱스가능해야만 한다. 게다가, 서브타입 실행은 베이스 메소드 정의(null 수신기 및 독립변수(argument), sqlfacet, 데이터 억세스, 뮤테이터 메소드 실행)에 대해 컴파일된 표현을 무효로 만들지 않아야 한다. 한편, 서브타입 실행은 베이스와 충돌하지 않지만 활성화(인텍스 가능하게)되도록 캐스트 또는 처리될 필요가 있는 행위를 추가할 수 있다. 만일 "N"이 "새로운 서브타입"을 지칭하는 경우, 즉, 베이스 타입이 거짓(false)으로 설정되거나 정의되지 않는다고 할지라도 서브타입은 특성을 참(true)로 설정할 수 있으며, 만일 "S"가 "베이스 정의와 동일한 것"을 지칭하는 경우, 즉, 서브타입의 정의가 베이스 타입과 동일한 경우에, UDT 메소드들은 도 8에 도시된 루틴 특성들을 포함할 수도 있다.
상술한 설명에 부가하여, 그리고 본 발명의 몇가지 실시예들의 경우, 모든 UDT 값은 특정 type_id 주변을 전송해야 하고, 이것은 일단 UDT가 생성되면 결코 변경할 수 없다. UDT 계승을 이용한 2진 차수에 대한 지원이 없기 때문에,이 메소드는 타입에 대한 2진수 비교에 영향을 미치지 않는다(2진수 비교될 모든 인스턴스가 동일한 type_id를 가지게 되는 것과 같이). 게다가, DROP 타입은 서브타입의 값을 포함하는 임의의 슈퍼타입으로 정의된 컬럼들이 없는지를 체크해야 한다(따라서 DROP 타입은 결과로서 고가일 수 있다). 유사하게, 추가 서브타입은 체인 형태의 모든 타입에 대한 슈퍼타입을 참조하는 현존 comp 플랜들을 무효로 만들 것이다.
결론
본 명세서에서 기술된 다양한 시스템, 방법 및 기술들은 하드웨어 또는 소프트웨어를 이용하여 실행될 수도 있거나 이들 둘다의 조합으로 적당한 곳에서 실행될 수도 있다. 따라서, 본 발명의 방법들 및 장치들, 또는 임의의 양상 또는 그 부분들은 플로피 디스켓, CD_ROM, 하드 드라이브 또는 임의의 다른 기계-판독 저장 매체와 같은 유형의 매체에서 구현된 프로그램 코드(즉, 명령)의 형태로 취해질 수 있으며, 여기서 프로그램 코드가 컴퓨터와 같은 기계에 로딩되고 실행될 때, 기계는 본 발명을 실행하기 위한 장치가 된다. 프로그램가능한 컴퓨터들상에서의 컴퓨터 코드 실행의 경우에, 컴퓨터는 프로세서, 이 프로세서에 의해 판독가능한 기억 매체(휘발성 및 불휘발성 메모리 및/또는 저장 소자를 포함), 적어도 하나의 입력 디바이스를 일반적으로 포함할 것이다. 하나 이상의 프로그램들은 컴퓨터 시스템과 통신하는 하이레벨 절차 또는 오브젝트 중심 프로그래밍 언어로 수행되는 것이 바람직하다. 그러나, 프로그램(들)은 원한다면 어셈블리 또는 기계 언어로 수행될 수 있다. 임의의 경우에, 언어는 컴파일 또는 패석된 언어, 및 하드웨어 실행으로 조합된 것일 수도 있다.
본 발명의 방법들 및 장치들은 또한 일부 전송 매체, 예컨대 전기 배선 또는 케이블, 광섬유, 또는 임의의 다른 형태의 전송을 통해 전송되는 프로그램 코드의 형태로 구현될 수도 있으며, 여기서 프로그램 코드가 EEOROM, 게이트 어레이, PLD(programmable logic device), 클라이언트 컴퓨터, 비디오 레코더 등과 같은 기계에 수신 및 로딩되며 실행될 때, 기계는 본 발명을 실행하기 위한 장치가 된다. 범용 프로세서상에서 실행될 때, 프로그램 코드는 프로세서와 결합하여 본 발명의 인텍스가능한 기능을 수행하도록 동작하는 고유 장치를 제공한다.
본 발명이 다양한 도면들의 바람직한 실시예들과 결합하여 설명되었지만, 다른 유사한 실시예들이 사용될 수도 있으며, 또한 변형 및 추가가 본 발명의 동일 기능을 벗어나지 않는 범위내에서 수행하기 위한 상술한 실시예에서 이루어질 수도 있다는 것을 알 수 있을 것이다. 예를 들면, 본 발명의 예시적인 실시예들이 개인용 컴퓨터들의 기능을 에뮬레이팅하는 디지털 디바이스들에 관련하여 기술되었지만, 본 분야의 숙련된 자라면 본 발명은 본 출원에서 기술된 바와 같이 디지털 디바이스들에 국한되지 않는다는 것을 알 수 있을 것이며, 유선 또는 무선의, 게임 콘솔 핸드헬드 컴퓨터, 포터블 컴퓨터 등과 같은 소정수의 현존 또는 앞으로 출시될 컴퓨팅 디바이스들 또는 환경에 적용할 수도 있으며, 통신 네트워크를 통해 접속되며 네트워크를 통해 상호작용하는 소정수의 컴퓨팅 디바이스들에 적용될 수도 있다. 또한, 핸드헬드 디바이스 구동 시스템 및 다른 어플리케이션 특정 하드웨어/소프트웨어 인터페이스 시스템들 포함하는 다양한 컴퓨터 플랫폼들이 본 명세서에서 고려되며, 특히 다수의 무선 네트워크된 디바이스들이 계속해서 증가하는 것과 같이 고려되는 것이 강조되어야만 한다. 따라서, 본 발명은 임의의 단일 실시예에 국한되지 않아야만 하며, 첨부된 청구범위에 따라 폭 및 범위가 추론되어야 한다.
Claims (30)
- 프로세서, 상기 프로세서에 통신 가능하게 연결된 데이터베이스 저장소, 및 상기 프로세서에 연결된 데이터베이스를 포함하는 데이터베이스 시스템에서, 사용자 정의 타입을 생성하기 위한 방법 - 상기 방법은 상기 프로세서에서 수행됨 - 으로서,사용자 정의 타입의 구조를 정의하는 클래스 및 상기 사용자 정의 타입의 인스턴스에 대해 호출될 수 있는 메소드를 구현하는 코드를 수신하는 단계;상기 클래스에 대한 계약(contract)을 실시(enforce)하는 단계- 상기 계약은상기 클래스가 상기 데이터베이스 저장소 내의 사용자 정의 타입의 인스턴스를 지속하기 위한 복수의 상이한 포맷들 중 하나를 특정한다는 제1 요구사항;상기 클래스가 상기 사용자 정의 타입에 대한 널 값(null value)을 리턴할 수 있다는 제2 요구사항;상기 클래스가 상기 사용자 정의 타입을 다른 타입으로 변환하기 위한 메소드를 제공한다는 제3 요구사항을 포함함 -;상기 클래스가 상기 계약의 요구사항들을 만족시킬 때에만 상기 사용자 정의 타입의 인스턴스를 생성가능하게 하는 단계;상기 수신하는 단계, 실시하는 단계, 및 생성가능하게 하는 단계를 수행하여 상기 데이터베이스의 컨텍스트(context)에서 사용자 정의 타입을 생성하는 단계;상기 데이터베이스 시스템의 질의 언어로 된 표현(expression)을 수신하는 단계 - 상기 표현의 평가(evaluation)는 상기 사용자 정의 타입의 인스턴스의 메소드의 호출을 요구함 - ;상기 표현을, 상기 사용자 정의 타입의 인스턴스에 대한 요구되는 메소드를 호출하는 일련의 프로그램 코드 명령어로 변환하는(translate) 단계;상기 프로그램 코드의 실행 중에 상기 메소드를 호출하는 단계; 및상기 메소드 호출의 결과를 상기 질의 언어로 된 표현의 평가로서 리턴하는 단계를 포함하는 사용자 정의 타입 생성 방법.
- 제1항에 있어서,상기 사용자 정의 타입의 인스턴스를 생성할 때 상기 데이터베이스 시스템에 의한 후속 사용을 위하여 상기 사용자 정의 타입에 대한 메타데이터를 저장하는 단계를 더 포함하는 사용자 정의 타입 생성 방법.
- 제1항에 있어서,상기 사용자 정의 타입의 인스턴스를 지속하기 위한 복수의 상이한 포맷들은,상기 사용자 정의 타입의 인스턴스가 상기 데이터베이스 시스템의 본래 포맷(native format)에 따라 자동적으로 시리얼화된 제1 포맷; 및상기 사용자 정의 타입의 인스턴스가 상기 클래스에 의해 정의된 방식으로 시리얼화된 제2 포맷을 포함하는 사용자 정의 타입 생성 방법.
- 제1항에 있어서,상기 사용자 정의 타입을, 테이블내의 컬럼값, 변수, 루틴의 파라미터 또는 루틴의 리턴값 중 하나로서 인스턴스화하는 단계를 더 포함하는 사용자 정의 타입 생성 방법.
- 삭제
- 제1항에 있어서,상기 사용자 정의 타입을 정의하는 클래스는, 호출시에, 상기 사용자 정의 타입의 값이 변경될 수 있게 하는 뮤테이터(mutator) 메소드를 포함하고,상기 방법은 상기 사용자 정의 타입의 인스턴스에 대하여 상기 뮤테이터 메소드를 호출하여 상기 인스턴스의 값을 변경시키는 단계를 더 포함하는 사용자 정의 타입 생성 방법.
- 컴퓨터 판독가능 저장 매체로서,상기 컴퓨터 판독가능 저장 매체는 컴퓨터 실행가능 명령어를 포함하고,상기 컴퓨터 실행가능 명령어는, 프로세서, 상기 프로세서에 통신 가능하게 연결된 데이터베이스 저장소, 및 상기 프로세서에 통신 가능하게 연결된 데이터베이스를 포함하는 컴퓨터 시스템 상에서 실행될 때에, 상기 프로세서로 하여금, 제1항 내지 제4항 및 제6항 중 어느 한 항의 방법을 수행하도록 하는 컴퓨터 판독가능 저장 매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/775,282 US6976029B2 (en) | 2004-02-10 | 2004-02-10 | System and method for providing user defined types in a database system |
US10/775,282 | 2004-02-10 | ||
US10/837,929 | 2004-05-03 | ||
US10/837,929 US7539688B2 (en) | 2004-02-10 | 2004-05-03 | Systems and methods for supporting inheritance for user-defined types |
PCT/US2004/024442 WO2005081668A2 (en) | 2004-02-10 | 2004-07-29 | Systems and methods for supporting inheritance for user-defined types |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117017314A Division KR20110091597A (ko) | 2004-02-10 | 2004-07-29 | 사용자 정의 타입들에 대한 계승을 지원하기 위한 시스템 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20060130480A KR20060130480A (ko) | 2006-12-19 |
KR101440615B1 true KR101440615B1 (ko) | 2014-09-16 |
Family
ID=34915771
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020057010948A KR101440615B1 (ko) | 2004-02-10 | 2004-07-29 | 사용자 정의 타입들에 대한 계승을 지원하기 위한 시스템및 방법 |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP1683046A4 (ko) |
JP (1) | JP5108309B2 (ko) |
KR (1) | KR101440615B1 (ko) |
WO (1) | WO2005081668A2 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8615730B2 (en) | 2006-07-14 | 2013-12-24 | Microsoft Corporation | Modeled types-attributes, aliases and context-awareness |
US10705802B2 (en) | 2013-03-20 | 2020-07-07 | Microsoft Technology Licensing, Llc | Extensible and queryable strong types |
JP6044960B2 (ja) | 2013-12-26 | 2016-12-14 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | シリアライザを特化する方法、装置及びコンピュータプログラム |
US10936592B2 (en) | 2015-04-30 | 2021-03-02 | Micro Focus Llc | Dynamic function invocation |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5696961A (en) * | 1996-05-22 | 1997-12-09 | Wang Laboratories, Inc. | Multiple database access server for application programs |
US5826077A (en) * | 1990-04-30 | 1998-10-20 | Texas Instruments Incorporated | Apparatus and method for adding an associative query capability to a programming language |
US5864862A (en) * | 1996-09-30 | 1999-01-26 | Telefonaktiebolaget Lm Ericsson (Publ) | System and method for creating reusable components in an object-oriented programming environment |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3747525B2 (ja) * | 1996-08-28 | 2006-02-22 | 株式会社日立製作所 | 並列データベースシステム検索方法 |
US6108659A (en) * | 1998-12-22 | 2000-08-22 | Computer Associates Think, Inc. | Method and apparatus for executing stored code objects in a database |
-
2004
- 2004-07-29 WO PCT/US2004/024442 patent/WO2005081668A2/en not_active Application Discontinuation
- 2004-07-29 KR KR1020057010948A patent/KR101440615B1/ko active IP Right Grant
- 2004-07-29 JP JP2006552092A patent/JP5108309B2/ja not_active Expired - Fee Related
- 2004-07-29 EP EP04779487A patent/EP1683046A4/en not_active Withdrawn
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5826077A (en) * | 1990-04-30 | 1998-10-20 | Texas Instruments Incorporated | Apparatus and method for adding an associative query capability to a programming language |
US5696961A (en) * | 1996-05-22 | 1997-12-09 | Wang Laboratories, Inc. | Multiple database access server for application programs |
US5864862A (en) * | 1996-09-30 | 1999-01-26 | Telefonaktiebolaget Lm Ericsson (Publ) | System and method for creating reusable components in an object-oriented programming environment |
Also Published As
Publication number | Publication date |
---|---|
JP5108309B2 (ja) | 2012-12-26 |
WO2005081668A3 (en) | 2006-05-18 |
KR20060130480A (ko) | 2006-12-19 |
EP1683046A2 (en) | 2006-07-26 |
EP1683046A4 (en) | 2009-07-08 |
JP2007522558A (ja) | 2007-08-09 |
WO2005081668A2 (en) | 2005-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7539688B2 (en) | Systems and methods for supporting inheritance for user-defined types | |
US7376656B2 (en) | System and method for providing user defined aggregates in a database system | |
US7356546B2 (en) | System and method for object persistence in a database store | |
US6243709B1 (en) | Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies | |
US7284010B2 (en) | System and method for storing and retrieving a field of a user defined type outside of a database store in which the type is defined | |
US7325007B2 (en) | System and method for supporting non-native data types in a database API | |
EP1603057A2 (en) | Systems and methods for the implementation of unordered and ordered collections in data store | |
EP1622046A2 (en) | System and method for delayed fetching of designated members of a user defined type | |
JPH0644128A (ja) | オブジェクト指向プログラミングを支援するデータベース管理システム及び方法 | |
KR101440615B1 (ko) | 사용자 정의 타입들에 대한 계승을 지원하기 위한 시스템및 방법 | |
KR101030368B1 (ko) | 데이터 저장소 내의 비순서화 및 순서화 컬렉션의 구현을 위한 시스템 및 방법 | |
EP1040432B1 (en) | Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies | |
Arora et al. | Oracle Database Application Developer's Guide-Object-Relational Features 10g Release 2 (10.2) B14260-01 | |
Abraham et al. | Oracle Database Object-Relational Developer’s Guide 11g Release 1 (11.1) B28371-03 | |
Abraham et al. | Oracle Database Object-Relational Developer's Guide 11g Release 2 (11.2) E11822-04 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
A107 | Divisional application of patent | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
J201 | Request for trial against refusal decision | ||
AMND | Amendment | ||
B601 | Maintenance of original decision after re-examination before a trial | ||
J301 | Trial decision |
Free format text: TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20120927 Effective date: 20140514 |
|
S901 | Examination by remand of revocation | ||
GRNO | Decision to grant (after opposition) | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20170818 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20180816 Year of fee payment: 5 |