2011-09-15 4 views
0

tl; dr : DB 이름을 나타내는 SqlServer 쿼리를 단위 테스트하려고하지만 HyperSql에서 작동하지 않는 것 같습니다.HyperSQL에서 SqlServer의 ".."지원을 지원하는 방법은 무엇입니까?


SQL Server를 프로덕션 환경에서 사용하고 있으며 HyperSQL을 단위 테스트 용 데이터베이스로 사용하려고합니다. SQL 쿼리를 생성하는 클래스를 테스트하려고하므로 실제 데이터베이스에 의해 구문 분석 된 쿼리가 테스트의 일부이므로 데이터베이스를 스텁하는 것은 옵션이 아닙니다.

쿼리는 SELECT * FROM EntAsdfDb007..Data_Table 형태로 생성되지만, 원하는 경우 스키마 이름 ('db')을 사용할 수 있습니다.

SqlServer의 SELECT 형식에 대해 이해했기 때문에 데이터베이스 이름 뒤에 스키마 이름을 지정할 수 있습니다. 또한 데이터베이스 이름을 삭제하고 유추 할 수 있습니다.

HyperSqlDb에서 'db'스키마를 만들고 그 안에 필요한 테이블을 만들 수 있었으며 해당 스키마 내에서 테이블을 만들 수 있었지만 설정 한 후에도 데이터베이스 이름으로 쿼리 할 수 ​​없었습니다. DB 이름은 .setDatabaseName()입니다. 내가 얻을 수는 예외입니다 :

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: ENTASDFDB007 

그냥 명확하게하기 위해 : 내가 단위 테스트 SELECT * FROM EntAsdfDb007..Data_Table 같은 SQL을 사용하는 클래스를. 유닛 테스트 목적으로 HyperSql의 인스턴스를 설정하려고하지만 HyperSql은 사용 된 구문을 거부하는 것 같습니다.

+0

사용하여 테이블에 액세스 할 수 왜 당신의 단위 테스트를 위해 SQL 서버 Express 또는 SQL 서버 개발자 버전을 사용할 수 있습니까? – nabrond

+1

@Brandon 그것은 기본적으로 Java 기반 데이터베이스 일 필요가 있다는 것을 의미하므로 @Brandon은 JUnit 테스트를 통해 설정, 호스팅 및 제어 할 수있는 무언가 여야합니다. 도움이된다면 [Apache Derby] (http://db.apache.org/derby/) 또는 그와 비슷한 것으로 전환 할 수 있지만 기본 앱은 다소 의문의 여지가 있습니다. – ArtB

답변

1

그건 불가능합니다.

HyperSQL은 비표준 명명 체계를 허용하도록 변경할 수 없습니다.

+0

'SELECT * FROM EntAsdfDb007.db.Data_Table'을 수락 할 수있는 방법이 있습니까? – ArtB

+0

나는 그렇게 생각하지 않는다. 'catalog.schema.table'이 될 SQL 표준으로부터. 내가 아는 한 HSQLDB는 스키마 만 지원하며 스키마는 지원하지 않는다. –

+0

"카탈로그"감사합니다! 나는 그것을 위해 이름이 필요했다. 그것은 나를 더 멀리 도울 것이다. – ArtB

0

가능합니다. HSQLDB는 데이터베이스 당 하나의 카탈로그를 가지고 있습니다. 카탈로그 이름은 기본적으로 PUBLIC이며 변경할 수 있습니다.

ALTER CATALOG PUBLIC RENAME TO EntAsdfDb007 

그런 다음

SELECT * FROM EntAsdfDb007.db.Data_Table 
관련 문제