RAD 스튜디오 12.0 아테네 "새 기능 한글 요약본: FireDAC" 입니다.
12.0 아테네의 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New (영문 보기, 한글 자동 번역 보기) 와 관련 페이지를 보기 바랍니다.
12.0 아테네 새 기능 요약 - FireDAC
QBE
RAD 스튜디오 12.0에서는, 이제 FireDAC이 QBE (query by example, 예문에 의한 쿼리)를 지원한다. TFDQBE라는 새 컴포넌트 덕분이다. TFDQBE는 query-by-example 컴포넌트를 표현한다.
- FDQBE.Edit을 사용한 후, TFDQBE 컴포넌트는 인-메모리 데이터셋을 생성한다. 그 안에 있는 필드들의 세트는 메인 데이터셋과 똑같다. 하지만, 모든 필드가 ftString이다. 이 인-메모리 데이터셋은 TDataSource.DataSet를 대체한다.
- 사용자는 필터링 기준을 db-인식 컨트롤 형태 또는 그리드 안에 넣을 수 있다. 이 기준 언어는 필드 이름이 필요없다. 그리고 다른 단순화 효과가 있다. 예를 들어, "OrderID < 10255"로 필터링하려면 "< 10255"를, 같은 값 필터링에서는 그저 "10255"를, "like"인 경우 "1025%" 등을 쓴다.
- FDQBE.Post 메서드가 호출되면, TFDQBE 컴포넌트는 원래 있던 FDQuery 쿼리 또는 Filter 프로퍼티(FDQBF.Language 프로퍼티에 따라 다름)를 변경한다. 그리고 입력된 값을 기반으로 새 쿼리를 생성한다.
이는 영구 필드(persistent field)가 있는 활성 또는 비활성 데이터셋에서 작동한다. 이 방식을 사용하면 룩업 필드(lookup field)로 필터링 등등을 할 수 있다.
FireDAC SQLite 버전 업데이트
RAD 스튜디오 12.0에는 SQLite 3.42 지원이 추가되었다. 또한 여전히 SQLite 3.31.1을 암호화(FDE)와 함께 사용하는 옵션을 유지한다. SQLite가 버전 3.42부터 FireDAC이 암호화 지원에 사용해온 메커니즘을 삭제했기 때문에 더 이상 사용할 수 없다. 따라서 SQLite를 FireDAC에서 사용하는 방법은 세 가지이다.
- FireDAC 암호화 없이, SQLite 최신 버전을 사용하기
- 유료인 SQLite EE(네이티브 SQLite 암호화 지원 포함)를 사용하기. 이것은 RAD 스튜디오 11.0부터 FireDAC에서 지원해왔다.
- SQLite 3.31.1 또는 이전 버전을 FireDAC 암호화(FDE)와 함께 사용하기
알아둘 점: SQLite에서 인터베이스 ToGo(엠바카데로 인터베이스의 멀티-플랫폼 임베디드 버전)로 전환하는 것을 고려해보자. 암호화를 보다 정교하게 지원한다(DB 전체를 통째로 암호화 할 뿐만 아니라 민감한 데이터가 포함된 특정 테이블이나 틀정 열만 암호화 할 수도 있다)
FireDAC과 보안
RAD 스튜디오 12.0에는 FireDAC에서 보안 관련 기능이 추가되었다. 이 기능들과 전반적으로 좋은 보안 관행을 사용하면, 보다 안전한 데이터베이스 애플리케이션을 개발할 수 있다. TFDSecurityOptions에서 다음 프로퍼티(들)을 사용할 수 있다.
- AllowedCommandKinds : SQL 명령 실행을 제한한다. 그래서, 해커가 쿼리를 수정하거나 데이터베이스를 원치 않게 변경하는 것을 방지한다.
- AllowMultiCommands : 여러 SQL 명령 실행을 활성화하거나 비활성화한다. 기본적으로 활성화되어 있으며, 이와 일치하는 기능을 제공하는 데이터베이스에서만 작동한다: SQLite, PostgreSQL, MySQL
- AllowSQLChange : 이 설정을 활성화하면, 실행 중에 FireDAC SQL 쿼리 텍스트의 변경을 방지한다. DoSQLChanging과 같은 메서드는 CheckCanChangeSQL을 호출하므로 이제는 (기타 조건들 중에서) 이 특정 설정을 확인한다.
- ExactUpdatedRecsNum : 정수이며, 기본값은 -1이다. > 0으로 설정된 경우 다음과 함께 사용한다.
FDQuery.FetchOptions.Mode := fmExactRecsMax; FDQuery.FetchOptions.RecsMax := 1;
FireDAC은 SQL UPDATE 명령을 추가 검사를 통해 래핑(wrap)한다.
FireDAC 강화
- FireDAC 연결 오브젝트에는 새 프로퍼티인 TFDCustomConnectionCommandsExecuted가 있다. 이것은 UInt64 값이다. 사용자는 이것를 통해 연결이 새로운 것인지(예: 연결 풀링의 경우) 또는 재활용 중이고 이미 데이터베이스와 상호 작용하는 데 사용되었는지 확인하는 데 사용할 수 있다. 이상적으로는, 0인 경우, 아직 이 연결에서 실행된 명령이 없었다는 뜻이다.
- FireDAC.Phys.SQLiteWrapper.Stat.pas 유닛은 이제 최신 버전인 SQLite 3.42를 사용한다.
- 새 유닛 FireDAC.Phys.SQLiteWrapper.FDEStat.pas는 SQLite 버전 3.31.1을 사용하며, FireDAC 암호화(FDE)도 계속 사용한다.
- FireDAC에는 MongoDB 안에 있는 Decimal128에 대한 지원을 추가되었다.
- FireDAC에는 Datasnap을 위해 HTTP 프로토콜 지원이 추가되었다.
- FireDAC에는 SQL Server를 위해 {INTO } 이스케이프 시퀀스 지원이 추가되었다(RETURNING 통합 지원(FireDAC) 참조).
- 업데이트된 TSQLiteEngineLinkage:
- slFDEStatic 추가됨 : FireDAC.Phys.SQLiteWrapper.FDEStat.pas
- slStatic : FireDAC.Phys.SQLiteWrapper.Stat.pas.
- 기본 연결 모드는 정적(static)이고, SQLite 버전 3.31.1을 FDE와 함께 사용한다.
안드로이드, 리눅스, iOS 플랫폼의 경우, 오직 하나의 정적 연결 유닛(static linkage unit)만 프로젝트에 동시에 포함될 수 있다. 즉, FireDAC.Phys.SQLiteWrapper.Stat 또는 FireDAC.Phys.SQLiteWrapper.FDESt 중 하나를 사용할 수 있다. 하지만 동일한 프로젝트에서 둘 다 사용할 수는 없다. 그렇게 하면, 링커는 심볼이 중복되기 때문에 오류를 생성한다.
최신 버전의 SQLite로 이동함으로써, FireDAC은 최신 데이터베이스 버전에 추가된 DDL 명령을 사용할 수 있다. 여기에는 컬럼(Column, 열)에 대한 DROP 등 ALTER TABLE과 같은 것들이 해당된다.