在Smalltalk.Glorp.DatabasePlatform我添加了两个空的方法#printPreLimitWrapper:上:与#printPostLimitWrapper:上:这是我在Smalltalk.Glorp.OraclePlatform覆盖:
printPreLimitWrapper: anInteger on: aCommand
aCommand nextPutAll: ' SELECT * FROM ('
printPostLimitWrapper: anInteger on: aCommand
aCommand nextPutAll: ') WHERE ROWNUM <= '.
anInteger printOn: aCommand.
aCommand nextPutAll: ' '.
在Smalltalk.Glorp.SimpleQuery我补充:
printPostLimitWrapperOn: aCommand
self hasLimit ifFalse: [^self].
self platform printPostLimitWrapper: self limit on: aCommand.
printPreLimitWrapperOn: aCommand
self hasLimit ifFalse: [^self].
self platform printPreLimitWrapper: self limit on: aCommand.
而且在Smalltalk.Glorp.QuerySelectCommand我改变了下面的方法:
printSQL
query printPreLimitWrapperOn: self.
stream nextPutAll: 'SELECT '.
query printSelectFieldsOn: self.
self findBoundExpressions.
query printTablesOn: self.
query printWhereClauseOn: self.
query printJoinsOn: self.
query printOrderingOn: self.
query printGroupByOn: self.
query printPostLimitOn: self.
query printOffsetOn: self.
query printPostLimitWrapperOn: self.
限制Oracle中行数的常用方法是select * from(select ... order by ...)其中rownum <10。是否可以修改由Glorp生成的查询? –
是的,应该提到我知道如何在Oracle中做到这一点。我只是不知道如何在格洛普做到这一点。 – Cantillon
Glorp在使用Oracle时是否在后台使用游标,还是实际将内存中的所有结果都提取出来? –