SqueakStORE (was: Re: Envy or Store or what?)

Wouter Gazendam squeak-dev at lists.squeakfoundation.org
Thu Oct 31 20:43:05 UTC 2002


--Apple-Mail-30--192273036
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed

Hi all,

Since you folks are discussing the possibility of making some 
Squeak-StORE connection, I had some code lying around which basically 
does just that.

What it does:
  - Connect to a Postgres StORE db.
  - Save a ChangeSet as a Package.
  - Load in a Package in a ChangeSet.
  - Publish newer versions of the Package.

What it doesn't:
  - No UI
  - No performance (I think it's the PostgreSQL connection)
  - No Bundles
  - Not very well tested

It currently tries to mimic a VW-StORE package, including VW class 
definitons and a guess at Namespaces.

Warning: This is more a proof of concept than a working thing.

Wouter Gazendam
CosmoCows
http://www.cosmocows.com


--Apple-Mail-30--192273036
Content-Disposition: attachment;
	filename=SqueakStORE.6.cs
Content-Transfer-Encoding: quoted-printable
Content-Type: application/text;
	x-mac-creator=522A6368;
	x-unix-mode=0644;
	x-mac-type=54455854;
	name="SqueakStORE.6.cs"

'=46rom=20Squeak3.2=20of=2011=20July=202002=20[latest=20update:=20#4956]=20=
on=2031=20October=202002=20at=209:29:05=20pm'!=0DMimeConverter=20=
subclass:=20#Base64MimeConverter=0D=09instanceVariableNames:=20'data=20=
lineBreaks=20'=0D=09classVariableNames:=20'FromCharTable=20ToCharTable=20=
'=0D=09poolDictionaries:=20''=0D=09category:=20'Collections-Streams'!=0D=
Object=20subclass:=20#ConnectionManager=0D=09instanceVariableNames:=20=
'username=20password=20host=20port=20databaseName=20connectionPool=20'=0D=
=09classVariableNames:=20''=0D=09poolDictionaries:=20''=0D=09category:=20=
'StORE-Core'!=0DConnectionManager=20class=0D=09instanceVariableNames:=20=
'current=20'!=0DObject=20subclass:=20#PackageManager=0D=09=
instanceVariableNames:=20'currentPackage=20packages=20'=0D=09=
classVariableNames:=20''=0D=09poolDictionaries:=20''=0D=09category:=20=
'StORE-Core'!=0DPackageManager=20class=0D=09instanceVariableNames:=20=
'current=20'!=0DObject=20subclass:=20#PersistentObject=0D=09=
instanceVariableNames:=20''=0D=09classVariableNames:=20''=0D=09=
poolDictionaries:=20''=0D=09category:=20'StORE-Core'!=0DPersistentObject=20=
subclass:=20#ClassDefinitionRecord=0D=09instanceVariableNames:=20=
'packageRef=20classRef=20metaclassRef=20definitionOrder=20classRecord=20=
metaclassRecord=20package=20'=0D=09classVariableNames:=20''=0D=09=
poolDictionaries:=20''=0D=09category:=20'StORE-Core'!=0DPersistentObject=20=
subclass:=20#PersistentPKObject=0D=09instanceVariableNames:=20=
'primaryKey=20'=0D=09classVariableNames:=20''=0D=09poolDictionaries:=20=
''=0D=09category:=20'StORE-Core'!=0DPersistentPKObject=20subclass:=20=
#Blob=0D=09instanceVariableNames:=20'blobtype=20blobdata=20'=0D=09=
classVariableNames:=20''=0D=09poolDictionaries:=20''=0D=09category:=20=
'StORE-Core'!=0DPersistentPKObject=20subclass:=20#PersistentTraceObject=0D=
=09instanceVariableNames:=20'name=20trace=20timestamp=20username=20'=0D=09=
classVariableNames:=20''=0D=09poolDictionaries:=20''=0D=09category:=20=
'StORE-Core'!=0DPersistentTraceObject=20subclass:=20#MethodRecord=0D=09=
instanceVariableNames:=20'version=20classname=20metastring=20source=20=
sourcecodeId=20protocolName=20'=0D=09classVariableNames:=20''=0D=09=
poolDictionaries:=20''=0D=09category:=20'StORE-Core'!=0D=
PersistentTraceObject=20subclass:=20#PersistentTraceCommentObject=0D=09=
instanceVariableNames:=20'comment=20commentId=20'=0D=09=
classVariableNames:=20''=0D=09poolDictionaries:=20''=0D=09category:=20=
'StORE-Core'!=0DPersistentTraceCommentObject=20subclass:=20#ClassRecord=0D=
=09instanceVariableNames:=20'superclass=20definition=20definitionId=20=
environmentString=20'=0D=09classVariableNames:=20''=0D=09=
poolDictionaries:=20''=0D=09category:=20'StORE-Core'!=0D=
PersistentTraceCommentObject=20subclass:=20#DataElement=0D=09=
instanceVariableNames:=20'definitionId=20environmentString=20=
protocolName=20typeString=20definition=20'=0D=09classVariableNames:=20''=0D=
=09poolDictionaries:=20''=0D=09category:=20'StORE-Core'!=0D=
PersistentTraceCommentObject=20subclass:=20#Package=0D=09=
instanceVariableNames:=20'version=20binfile=20classDefinitions=20=
methodDefinitions=20changeSet=20properties=20propertiesId=20parcelId=20=
blessingLevel=20'=0D=09classVariableNames:=20''=0D=09poolDictionaries:=20=
''=0D=09category:=20'StORE-Core'!=0DConnectionManager=20subclass:=20=
#PgSqlConnectionManager=0D=09instanceVariableNames:=20''=0D=09=
classVariableNames:=20''=0D=09poolDictionaries:=20''=0D=09category:=20=
'StORE-Core'!=0D=0D!Object=20methodsFor:=20'StORE'=20stamp:=20'WFB=20=
10/11/2002=2002:41'!=0DsqlString=0D=09^=20self=20asString=0D=0D!=20!=0D=0D=
=0D!Base64MimeConverter=20methodsFor:=20'conversion'=20stamp:=20'WFB=20=
10/11/2002=2011:10'!=0DmimeEncode=0D=09"Convert=20from=20data=20to=206=20=
bit=20characters."=0D=09|=20phase1=20phase2=20raw=20nib=20lineLength=20|=0D=
=09phase1=20_=20phase2=20_=20false.=0D=09lineLength=20_=200.=0D=09=
[dataStream=20atEnd]=0D=09=09whileFalse:=20[self=20lineBreaks=20ifTrue:=20=
[lineLength=20>=3D=2070=0D=09=09=09=09ifTrue:=20[mimeStream=20cr.=0D=09=09=
=09=09=09lineLength=20_=200]].=0D=09=09=09data=20_=20raw=20_=20=
dataStream=20next=20asInteger.=0D=09=09=09nib=20_=20(data=20bitAnd:=20=
252)=0D=09=09=09=09=09=09bitShift:=20-2.=0D=09=09=09mimeStream=0D=09=09=09=
=09nextPut:=20(ToCharTable=20at:=20nib=20+=201).=0D=09=09=09(raw=20_=20=
dataStream=20next)=0D=09=09=09=09ifNil:=20[raw=20_=200.=0D=09=09=09=09=09=
phase1=20_=20true].=0D=09=09=09data=20_=20((data=20bitAnd:=203)=0D=09=09=09=
=09=09=09bitShift:=208)=0D=09=09=09=09=09=09+=20raw=20asInteger.=0D=09=09=
=09nib=20_=20(data=20bitAnd:=201008)=0D=09=09=09=09=09=09bitShift:=20-4.=0D=
=09=09=09mimeStream=0D=09=09=09=09nextPut:=20(ToCharTable=20at:=20nib=20=
+=201).=0D=09=09=09(raw=20_=20dataStream=20next)=0D=09=09=09=09ifNil:=20=
[raw=20_=200.=0D=09=09=09=09=09phase2=20_=20true].=0D=09=09=09data=20_=20=
((data=20bitAnd:=2015)=0D=09=09=09=09=09=09bitShift:=208)=0D=09=09=09=09=09=
=09+=20raw=20asInteger.=0D=09=09=09nib=20_=20(data=20bitAnd:=204032)=0D=09=
=09=09=09=09=09bitShift:=20-6.=0D=09=09=09mimeStream=0D=09=09=09=09=
nextPut:=20(ToCharTable=20at:=20nib=20+=201).=0D=09=09=09nib=20_=20data=20=
bitAnd:=2063.=0D=09=09=09mimeStream=0D=09=09=09=09nextPut:=20=
(ToCharTable=20at:=20nib=20+=201).=0D=09=09=09lineLength=20_=20=
lineLength=20+=204].=0D=09phase1=0D=09=09ifTrue:=20[mimeStream=20skip:=20=
-2;=0D=09=09=09=09=20nextPut:=20$=3D;=0D=09=09=09=09=20nextPut:=20$=3D.=0D=
=09=09=09^=20mimeStream].=0D=09phase2=0D=09=09ifTrue:=20[mimeStream=20=
skip:=20-1;=0D=09=09=09=09=20nextPut:=20$=3D.=0D=09=09=09^=20=
mimeStream]!=20!=0D=0D!Base64MimeConverter=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/11/2002=2011:11'!=0DlineBreaks=0D=09^(lineBreaks=20=3D=20=
false)=20not!=20!=0D=0D!Base64MimeConverter=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/11/2002=2011:11'!=0DlineBreaks:=20anObject=0D=09=
lineBreaks=20:=3D=20anObject!=20!=0D=0D=0D!ChangeSet=20methodsFor:=20=
'StORE=20in/out'=20stamp:=20'WFB=2010/11/2002=2000:45'!=0D=
storeOutChangesFor:=20class=20on:=20package=20=0D=09"Write=20out=20all=20=
the=20method=20changes=20for=20this=20class."=0D=09|=20changes=20|=0D=09=
changes=20_=20=0D=09(self=20methodChangesAtClass:=20class=20name).=0D=09=
changes=20isEmpty=0D=09=09ifFalse:=20[package=20storeOutChangedMessages:=20=
changes=20forClass:=20class]!=20!=0D=0D!ChangeSet=20methodsFor:=20'StORE=20=
in/out'=20stamp:=20'WFB=2010/11/2002=2018:14'!=0D=
storeOutClassDefinition:=20class=20on:=20package=20=0D=09(self=20=
atClass:=20class=20includes:=20#rename)=0D=09=09ifTrue:=20[package=0D=09=09=
=09=09renameClass:=20(self=20oldNameFor:=20class)=0D=09=09=09=09to:=20=
class=20name].=0D=09(self=20atClass:=20class=20includes:=20#change)=0D=09=
=09ifTrue:=20[package=20changeClass:=20class].=0D=09(self=20atClass:=20=
class=20includes:=20#add)=0D=09=09ifTrue:=20[package=20addClass:=20=
class].=0D=09(self=20atClass:=20class=20includes:=20#comment)=0D=09=09=
ifTrue:=20[package=20addClassComment:=20class]!=20!=0D=0D!ChangeSet=20=
methodsFor:=20'StORE=20in/out'=20stamp:=20'WFB=2010/11/2002=2000:52'!=0D=
storeOutOn:=20package=20=0D=09"Write=20out=20all=20the=20changes=20the=20=
receiver=20knows=20about"=0D=09|=20classList=20|=0D=09package=20=
changeSet=20=3D=20nil=20ifTrue:=20[package=20changeSet:=20self].=0D=09=
package=20changeSet=20=3D=20self=0D=09=09ifFalse:=20[^=20self=20error:=20=
'This=20package=20does=20not=20belong=20to=20this=20changeSet'].=0D=09=
classList=20_=20ChangeSet=20superclassOrder:=20self=20changedClasses=20=
asOrderedCollection.=0D=09"First=20put=20out=20rename,=20max=20classDef=20=
and=20comment=20changes."=0D=09classList=0D=09=09do:=20[:aClass=20|=20=
self=20storeOutClassDefinition:=20aClass=20on:=20package].=0D=09"Then=20=
put=20out=20all=20the=20method=20changes"=0D=09classList=0D=09=09do:=20=
[:aClass=20|=20self=20storeOutChangesFor:=20aClass=20on:=20package].=0D=09=
"Finally=20put=20out=20removals,=20final=20class=20defs=20and=20=
reorganization=20if=20any"=0D=09classList=0D=09=09reverseDo:=20[:aClass=20=
|=20self=20storeOutPSFor:=20aClass=20on:=20package].=0D=09self=20=
classRemoves=20asSortedCollection=0D=09=09do:=20[:aClassName=20|=20=
package=20removeClass:=20aClassName]!=20!=0D=0D!ChangeSet=20methodsFor:=20=
'StORE=20in/out'=20stamp:=20'WFB=2010/10/2002=2022:59'!=0DstoreOutPSFor:=20=
class=20on:=20package=20=0D=09"Write=20out=20removals=20and=20=
initialization=20for=20this=20class."=0D=09|=20dict=20changeType=20=
classRecord=20|=0D=09classRecord=20_=20changeRecords=0D=09=09=09=09at:=20=
class=20name=0D=09=09=09=09ifAbsent:=20[^=20self].=0D=09dict=20_=20=
classRecord=20methodChangeTypes.=0D=09dict=20keysSortedSafely=0D=09=09=
do:=20[:key=20|=20=0D=09=09=09changeType=20_=20dict=20at:=20key.=0D=09=09=
=09(#(#remove=20#addedThenRemoved=20)=20includes:=20changeType)=0D=09=09=09=
=09ifTrue:=20[package=20removeSelector:=20key=20storeString=20forClass:=20=
class]].=0D!=20!=0D=0D=0D!Class=20methodsFor:=20'StORE'=20stamp:=20'WFB=20=
10/10/2002=2023:35'!=0DfullName=0D=09^=20self=20namespace,'.',self=20=
name!=20!=0D=0D!Class=20methodsFor:=20'StORE'=20stamp:=20'WFB=20=
10/11/2002=2018:07'!=0Dnamespace=0D=09"Very=20crude=20way=20to=20get=20=
some=20sort=20of=20VW=20compatible=20namespaces"=0D=09|=20kpkg=20|=0D=09=
kpkg=20_=20self=20category=20upTo:=20$-.=0D=09kpkg=20=3D=20'Kernel'=0D=09=
=09ifTrue:=20[^'Core'].=0D=09kpkg=20=3D=20'Collections'=0D=09=09ifTrue:=20=
[^'Core'].=0D=09kpkg=20=3D=20'Graphics'=0D=09=09ifTrue:=20[^'UI'].=0D=09=
kpkg=20=3D=20'System'=0D=09=09ifTrue:=20[^'Kernel'].=0D=09kpkg=20=3D=20=
'Network'=0D=09=09ifTrue:=20[^'OS'].=0D=09^=20'Smalltalk'!=20!=0D=0D=0D=
!Base64MimeConverter=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/11/2002=2011:13'!=0DmimeNoLinebreakEncode:=20aStream=20=
=0D=09"Return=20a=20ReadWriteStream=20of=20characters.=20The=20data=20of=20=
aStream=20is=20encoded=20=0D=09as=2065=20innocuous=20characters.=20(See=20=
class=20comment).=203=20bytes=20in=20aStream=20=0D=09goes=20to=204=20=
bytes=20in=20output."=0D=09|=20me=20|=0D=09aStream=20position:=200.=0D=09=
me=20_=20self=20new=20dataStream:=20aStream.=0D=09me=20lineBreaks:=20=
false.=0D=09me=0D=09=09mimeStream:=20(ReadWriteStream=0D=09=09=09=09on:=20=
(String=20new:=20aStream=20size=20+=2020=20*=204=20//=203)).=0D=09me=20=
mimeEncode.=0D=09me=20mimeStream=20position:=200.=0D=09^=20me=20=
mimeStream!=20!=0D=0D=0D!ConnectionManager=20methodsFor:=20'private'=20=
stamp:=20'WFB=2010/7/2002=2022:27'!=0Drelease=0D=09connectionPool=20=
isNil=20ifFalse:=20[connectionPool=20copy=0D=09=09do:=20[:elem=20|=20=
self=20terminateConnection:=20elem].=20connectionPool=20:=3D=20=
OrderedCollection=20new]!=0D]style[(7=202=2014=2044=206=202=204=2022=204=20=
43)f1b,f1,f1cmagenta;,f1,f1cred;,f1,f1cmagenta;,f1,f1cblue;i,f1!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'WFB=2010/7/2002=2022:24'!=0DcloseConnection:=20aConnection=20=0D=09=
connectionPool=20add:=20aConnection!=20!=0D=0D!ConnectionManager=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'WFB=2010/7/2002=20=
22:23'!=0DcreateNewConnection=0D=09connectionPool=20add:=20(self=20=
retrConnection)!=20!=0D=0D!ConnectionManager=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'WFB=2010/7/2002=2022:23'!=0DgetConnection=0D=09=
connectionPool=20isEmpty=20ifTrue:=20[self=20createNewConnection].=0D=09=
^connectionPool=20removeFirst!=20!=0D=0D!ConnectionManager=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'WFB=2010/11/2002=2001:53'!=0D=
getResultOfQuery:=20aQuery=20=0D=09self=20sessionDo:=20[:session=20|=0D=09=
^=20self=20getResultOfQuery:=20aQuery=20inSession:=20session]!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'WFB=2010/11/2002=2001:49'!=0DgetResultOfQuery:=20aQuery=20inSession:=20=
session=0D=09|=20resultSet=20|=0D=09resultSet=20_=20session=20execute:=20=
aQuery.=0D=09resultSet=20errorResponse=20isNil=0D=09=09ifFalse:=20[self=20=
error:=20resultSet=20errorResponse=20value].=0D=09^=20resultSet=20rows=0D=
=09=09collect:=20[:row=20|=20row=20data=20copy]!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'WFB=2010/7/2002=2022:20'!=0Dinitialize=0D=09connectionPool=20:=3D=20=
OrderedCollection=20new!=20!=0D=0D!ConnectionManager=20methodsFor:=20'as=20=
yet=20unclassified'=20stamp:=20'WFB=2010/7/2002=2022:21'!=0D=
retrConnection=0D=09self=20subclassResponsibility!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'WFB=2010/11/2002=2001:52'!=0DsessionDo:=20aBlock=20=0D=09|=20session=20=
|=0D=09[session=20_=20self=20getConnection.=0D=09aBlock=20value:=20=
session]=0D=09=09ensure:=20[self=20closeConnection:=20session]!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'WFB=2010/7/2002=2022:26'!=0DterminateConnection:=20aConnection=20=0D=09=
connectionPool=20remove:=20aConnection!=20!=0D=0D!ConnectionManager=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'WFB=2010/7/2002=20=
22:12'!=0Dusername:=20anUsername=20password:=20aPassword=20host:=20aHost=20=
port:=20aPort=20databaseName:=20aDatabaseName=0D=20username=20:=3D=20=
anUsername.=0D=20password=20:=3D=20aPassword.=0D=20host=20:=3D=20aHost.=0D=
=09=20port=20:=3D=20aPort.=0D=20databaseName=20:=3D=20aDatabaseName=0D!=20=
!=0D=0D!ConnectionManager=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/11/2002=2002:01'!=0Dusername=0D=09^username!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'transactions'=20stamp:=20'WFB=20=
10/11/2002=2002:35'!=0DbeginTransactionInSession:=20session=20=0D=09self=20=
getResultOfQuery:=20'BEGIN=20TRANSACTION'=20inSession:=20session=20!=20!=0D=
=0D!ConnectionManager=20methodsFor:=20'transactions'=20stamp:=20'WFB=20=
10/11/2002=2002:36'!=0DcommitTransactionInSession:=20session=20=0D=09=
self=20getResultOfQuery:=20'COMMIT'=20inSession:=20session=20!=20!=0D=0D=
!ConnectionManager=20methodsFor:=20'transactions'=20stamp:=20'WFB=20=
10/11/2002=2002:36'!=0DrollbackTransactionInSession:=20session=20=0D=09=
self=20getResultOfQuery:=20'ROLLBACK'=20inSession:=20session!=20!=0D=0D=0D=
!ConnectionManager=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/7/2002=2022:43'!=0Dcurrent=0D=09current=20isNil=0D=09=09=
ifTrue:=20[current=20_=20self=20defaultConnectionClass=20basicNew=20=
initialize.=0D=09=09=09Smalltalk=20addToShutDownList:=20self.=0D=09=09=09=
Smalltalk=20addToStartUpList:=20self].=0D=09^=20current!=20!=0D=0D=
!ConnectionManager=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/11/2002=2015:54'!=0DdefaultConnectionClass=0D=09^=20=
PgSqlConnectionManager!=20!=0D=0D!ConnectionManager=20class=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'WFB=2010/7/2002=20=
22:10'!=0Dnew=0D=09^=20self=20error:=20'Singleton,=20use=20>>current'!=20=
!=0D=0D!ConnectionManager=20class=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'WFB=2010/7/2002=2022:51'!=0Drelease=0D=09self=20=
releaseConnections.=0D=09=09=09current=20_=20nil!=20!=0D=0D=
!ConnectionManager=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/7/2002=2022:50'!=0DreleaseConnections=0D=09current=20=
isNil=0D=09=09ifFalse:=20[current=20release]!=20!=0D=0D=
!ConnectionManager=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/7/2002=2022:51'!=0DshutDown=0D=09self=20=
releaseConnections!=20!=0D=0D!ConnectionManager=20class=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'WFB=2010/7/2002=2022:51'!=0D=
startUp=0Dself=20releaseConnections!=20!=0D=0D=0D!PackageManager=20=
methodsFor:=20'initialize'=20stamp:=20'WFB=2010/9/2002=2019:04'!=0D=
addPackage:=20packageName=20=0D=09(packages=20includesKey:=20packageName=20=
)ifTrue:=20[self=20error:=20'Package=20',=20packageName,=20'already=20=
exists'].=0D=09^packages=20at:=20packageName=20put:=20(Package=20=
newNamed:=20packageName)=0D=09!=20!=0D=0D!PackageManager=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/10/2002=2022:24'!=0Dinitialize=0D=09=
packages=20_=20Dictionary=20new!=20!=0D=0D!PackageManager=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2016:16'!=0DconnectionManager=0D=
=09^ConnectionManager=20current!=20!=0D=0D!PackageManager=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2022:24'!=0Dpackages=0D=09=
^packages!=20!=0D=0D!PackageManager=20methodsFor:=20'accessing'=20stamp:=20=
'WFB=2010/11/2002=2001:43'!=0Dusername=0D=09^self=20connectionManager=20=
username!=20!=0D=0D!PackageManager=20methodsFor:=20'class=20changes'=20=
stamp:=20'WFB=2010/9/2002=2019:18'!=0DgetPackageForClass:=20class=0D=09=
^currentPackage!=20!=0D=0D!PackageManager=20methodsFor:=20'class=20=
changes'=20stamp:=20'WFB=2010/9/2002=2019:18'!=0DrecordClassChange:=20=
changeType=20forClass:=20class=0D=09|=20pkg=20|=0D=09pkg=20:=3D=20self=20=
getPackageForClass:=20class.=0D=09pkg=20recordClassChange:=20changeType=20=
forClass:=20class!=20!=0D=0D=0D!PackageManager=20class=20methodsFor:=20=
'instance=20creation'=20stamp:=20'WFB=2010/9/2002=2018:59'!=0Dcurrent=0D=09=
current=20isNil=20ifTrue:=20[current=20:=3D=20self=20basicNew=20=
initialize].=0D=09^current!=20!=0D=0D!PackageManager=20class=20=
methodsFor:=20'instance=20creation'=20stamp:=20'WFB=2010/9/2002=20=
18:58'!=0Dnew=0D=09^self=20error:=20'Singleton'!=20!=0D=0D=0D=
!PersistentObject=20methodsFor:=20'testing'=20stamp:=20'WFB=2010/11/2002=20=
01:31'!=0DisClean=0D=09^self=20isNew=20not=20and:=20[self=20isDirty=20=
not].!=20!=0D=0D!PersistentObject=20methodsFor:=20'testing'=20stamp:=20=
'WFB=2010/11/2002=2001:30'!=0DisDirty=0D=09self=20=
subclassResponsibility!=20!=0D=0D!PersistentObject=20methodsFor:=20=
'testing'=20stamp:=20'WFB=2010/11/2002=2001:30'!=0DisNew=0D=09self=20=
subclassResponsibility!=20!=0D=0D!PersistentObject=20methodsFor:=20=
'storage'=20stamp:=20'WFB=2010/11/2002=2004:03'!=0DinsertInSession:=20=
session=20=0D=09self=20preInsert.=20=0D=09self=20connectionManager=20=
getResultOfQuery:=20self=20insertString=20inSession:=20session!=20!=0D=0D=
!PersistentObject=20methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=20=
01:41'!=0DinsertString=0D=09|=20str=20queryColumns=20instVarNames=20val=20=
|=0D=09str=20_=20ReadWriteStream=20on:=20String=20new.=0D=09str=20=
nextPutAll:=20'INSERT=20INTO=20';=0D=09=09=20nextPutAll:=20self=20class=20=
tableName;=0D=09=09=20nextPutAll:=20'=20(=20'.=0D=09queryColumns=20_=20=
self=20class=20queryColumns.=0D=09queryColumns=0D=09=09do:=20[:col=20|=20=
str=20nextPutAll:=20col]=0D=09=09separatedBy:=20[str=20nextPutAll:=20',=20=
'].=0D=09str=20nextPutAll:=20'=20)=20values=20('.=0D=09instVarNames=20_=20=
self=20class=20allInstVarNames.=0D=09queryColumns=0D=09=09=
keysAndValuesDo:=20[:i=20:elem=20|=20=0D=09=09=09val=20_=20self=0D=09=09=09=
=09=09=09instVarAt:=20(instVarNames=0D=09=09=09=09=09=09=09=09indexOf:=20=
(queryColumns=20at:=20i)).=0D=09=09=09str=20nextPutAll:=20val=20=
sqlString.=0D=09=09i=20=3D=20queryColumns=20size=20ifFalse:=20[str=20=
nextPutAll:=20',=20']].=0D=09str=20nextPutAll:=20')'.=0D=09^=20str=20=
contents!=20!=0D=0D!PersistentObject=20methodsFor:=20'storage'=20stamp:=20=
'WFB=2010/11/2002=2001:41'!=0DpreInsert!=20!=0D=0D!PersistentObject=20=
methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=2003:07'!=0D=
storeInSession:=20session=20=0D=09self=20isClean=0D=09=09ifTrue:=20[^=20=
#wasClean].=0D=09(self=20isNew=0D=09=09=09or:=20[self=20isDirty])=0D=09=09=
ifTrue:=20[self=20insertInSession:=20session.=20^=20#updated]!=20!=0D=0D=
!PersistentObject=20methodsFor:=20'initialize'=20stamp:=20'WFB=20=
10/11/2002=2000:55'!=0Dinitialize!=20!=0D=0D!PersistentObject=20=
methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=2012:47'!=0D=
initializeFromArray:=20anArray=20=0D=09|=20resultColumns=20instVarNames=20=
queryColumns=20|=0D=09resultColumns=20_=20self=20class=20resultColumns.=0D=
=09queryColumns=20_=20self=20class=20queryColumns.=0D=09"Reorder=20the=20=
resultcolumns"=0D=09resultColumns=20_=20(queryColumns=0D=09=09=09=09=
select:=20[:elem=20|=20resultColumns=20includes:=20elem])=0D=09=09=09=09=
,=20(resultColumns=0D=09=09=09=09=09=09select:=20[:elem=20|=20=
(queryColumns=20includes:=20elem)=20not]).=0D=09instVarNames=20_=20self=20=
class=20allInstVarNames.=0D=09anArray=0D=09=09keysAndValuesDo:=20[:i=20=
:elem=20|=20self=0D=09=09=09=09instVarAt:=20(instVarNames=0D=09=09=09=09=09=
=09indexOf:=20(resultColumns=20at:=20i))=0D=09=09=09=09put:=20elem]!=20!=0D=
=0D!PersistentObject=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2002:21'!=0DconnectionManager=0D=09^self=20packageManager=20=
connectionManager!=20!=0D=0D!PersistentObject=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/11/2002=2012:51'!=0Ddecode:=20aString=20=0D=09aString=20=
isNil=20ifTrue:=20[^nil].=0D=09^=20(Base64MimeConverter=0D=09=09=
mimeDecodeToChars:=20(ReadStream=20on:=20aString))=20contents!=20!=0D=0D=
!PersistentObject=20methodsFor:=20'tools'=20stamp:=20'WFB=2010/10/2002=20=
18:06'!=0DgetPreviousVersion=0D=09^=20self=20class=20getObjectWithID:=20=
self=20trace!=20!=0D=0D!PersistentObject=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/11/2002=2002:21'!=0DpackageManager=0D=09=
^PackageManager=20current!=20!=0D=0D=0D!ClassDefinitionRecord=20=
methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=2000:00'!=0D=
initializeForClass:=20aClass=20=0D=09classRecord=20_=20ClassRecord=20=
newForClass:=20aClass.=0D=09metaclassRecord=20_=20ClassRecord=20=
newForMetaclass:=20aClass!=20!=0D=0D!ClassDefinitionRecord=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/11/2002=2003:19'!=0D=
initializeForClass:=20aClass=20inPackage:=20aPackage=20=0D=09self=20=
initializeForClass:=20aClass.=0D=09package=20_=20aPackage!=20!=0D=0D=
!ClassDefinitionRecord=20methodsFor:=20'initialize'=20stamp:=20'WFB=20=
10/10/2002=2018:21'!=0DinitializeFromArray:=20anArray=20=0D=09super=20=
initializeFromArray:=20anArray.=0D=09classRecord=20_=20ClassRecord=20=
getObjectWithID:=20classRef.=0D=09metaclassRecord=20_=20ClassRecord=20=
getObjectWithID:=20metaclassRef!=20!=0D=0D!ClassDefinitionRecord=20=
methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=2000:58'!=0D=
updateForClass:=20aClass=20=0D=09classRecord=20updateForClass:=20aClass.=0D=
=09metaclassRecord=20updateForMetaclass:=20aClass=0D!=20!=0D=0D=
!ClassDefinitionRecord=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/10/2002=2023:04'!=0DclassName=0D=09^=20classRecord=20name!=20!=0D=0D=
!ClassDefinitionRecord=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/11/2002=2016:18'!=0DclassRecord=0D=09^classRecord!=20!=0D=0D=
!ClassDefinitionRecord=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/11/2002=2011:29'!=0Dname:=20aString=20=0D=09"Used=20for=20renaming=20=
messages"=0D=09classRecord=20name:=20aString.=0D=09metaclassRecord=20=
name:=20aString,=20'=20class'!=20!=0D=0D!ClassDefinitionRecord=20=
methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=2012:55'!=0D=
insertInSession:=20session=20=0D=09classRecord=20storeInSession:=20=
session.=0D=09metaclassRecord=20storeInSession:=20session.=0D=09classRef=20=
_=20classRecord=20primaryKey.=0D=09metaclassRef=20_=20metaclassRecord=20=
primaryKey.=0D=09super=20insertInSession:=20session!=20!=0D=0D=
!ClassDefinitionRecord=20methodsFor:=20'storage'=20stamp:=20'WFB=20=
10/11/2002=2012:54'!=0DpreInsert=0D=09packageRef=20_=20package=20=
primaryKey!=20!=0D=0D!ClassDefinitionRecord=20methodsFor:=20'testing'=20=
stamp:=20'WFB=2010/11/2002=2013:56'!=0DisDirty=0D=09^=20true!=20!=0D=0D=
!ClassDefinitionRecord=20methodsFor:=20'testing'=20stamp:=20'WFB=20=
10/11/2002=2013:56'!=0DisNew=0D=09^=20true!=20!=0D=0D=0D=
!PersistentObject=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2012:29'!=0DconnectionManager=0D=09^PackageManager=20current=20=
connectionManager!=20!=0D=0D!PersistentObject=20class=20methodsFor:=20=
'tools'=20stamp:=20'WFB=2010/10/2002=2016:56'!=0DnoColumns=0D=09^=20#()!=20=
!=0D=0D!PersistentObject=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2000:15'!=0DnoQueryColumns=0D=09"These=20instVarNames=20are=20=
not=20to=20be=20included=20in=20a=20SELECT=20query=20generation"=0D=09^=20=
#()!=20!=0D=0D!PersistentObject=20class=20methodsFor:=20'tools'=20stamp:=20=
'WFB=2010/11/2002=2000:15'!=0DnoResultColumns=0D=09"These=20instVarNames=20=
are=20not=20to=20be=20filled=20with=20a=20query=20result"=0D=09^=20#()!=20=
!=0D=0D!PersistentObject=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2000:16'!=0DqueryColumns=0D=09^=20self=20allInstVarNames=20=
asOrderedCollection=20removeAll:=20self=20noQueryColumns;=0D=09=09=20=
yourself!=20!=0D=0D!PersistentObject=20class=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/11/2002=2000:16'!=0DresultColumns=0D=09^=20self=20=
allInstVarNames=20asOrderedCollection=20removeAll:=20self=20=
noResultColumns;=0D=09=09=20yourself!=20!=0D=0D!PersistentObject=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2000:17'!=0D=
selectArgsString=0D=09|=20str=20|=0D=09str=20_=20ReadWriteStream=20on:=20=
String=20new.=0D=09str=20nextPutAll:=20'select=20'.=0D=09self=20=
queryColumns=0D=09=09do:=20[:elem=20|=20str=20nextPutAll:=20'A.';=0D=09=09=
=09=09=20nextPutAll:=20elem]=0D=09=09separatedBy:=20[str=20nextPutAll:=20=
',=20'].=0D=09^=20str=20contents!=20!=0D=0D!PersistentObject=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2012:17'!=0D=
selectJoinClauses=0D=09^=20#()!=20!=0D=0D!PersistentObject=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/10/2002=2018:23'!=0D=
selectString=0D=09^=20self=20selectStringFromTables:=20self=20=
selectTables=20where:=20self=20selectWhereClauses=20,=20#('A.primarykey=20=
=3D=20'=20)!=20!=0D=0D!PersistentObject=20class=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/11/2002=2012:33'!=0DselectStringFromTables:=20tables=20=
where:=20whereClauses=20=0D=09|=20str=20|=0D=09str=20_=20ReadWriteStream=20=
on:=20String=20new.=0D=09str=20nextPutAll:=20self=20selectArgsString.=0D=09=
str=20nextPutAll:=20'=20FROM=20'.=0D=09tables=0D=09=09do:=20[:table=20|=20=
str=20nextPutAll:=20table]=0D=09=09separatedBy:=20[str=20nextPutAll:=20=
',=20'].=0D=09str=20nextPutAll:=20'=20WHERE=20'.=0D=09whereClauses=0D=09=09=
do:=20[:whereClause=20|=20str=20nextPutAll:=20whereClause]=0D=09=09=
separatedBy:=20[str=20nextPutAll:=20'=20AND=20'].=0D=09^=20str=20=
contents!=20!=0D=0D!PersistentObject=20class=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/10/2002=2017:51'!=0DselectTables=0D=09^=20=
OrderedCollection=20with:=20self=20tableName,=20'=20A'!=20!=0D=0D=
!PersistentObject=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/10/2002=2017:48'!=0DselectWhereClauses=0D=09^=20#()!=20!=0D=0D=
!PersistentObject=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/10/2002=2016:37'!=0DtableName=0D=09^'tw_',=20self=20name!=20!=0D=0D=
!PersistentObject=20class=20methodsFor:=20'instance=20creation'=20stamp:=20=
'WFB=2010/11/2002=2012:22'!=0DgetObjectWithID:=20primarykey=20=0D=09|=20=
arr=20|=0D=09arr=20_=20PackageManager=20current=20connectionManager=20=
getResultOfQuery:=20self=20selectString=20,=20primarykey=20asString.=0D=09=
arr=20size=20=3D=201=0D=09=09ifTrue:=20[^=20self=20new=20=
initializeFromArray:=20arr=20first].=0D=09self=20error:=20'Not=20found'!=20=
!=0D=0D!PersistentObject=20class=20methodsFor:=20'instance=20creation'=20=
stamp:=20'WFB=2010/11/2002=2000:55'!=0Dnew=0D=09^super=20new=20=
initialize!=20!=0D=0D=0D!ClassDefinitionRecord=20class=20methodsFor:=20=
'instance=20creation'=20stamp:=20'WFB=2010/11/2002=2012:55'!=0D=
getAllInPackage:=20aPackage=20=0D=09|=20primaryKey=20arr=20query=20|=0D=09=
primaryKey=20_=20aPackage=20primaryKey.=0D=09query=20_=20self=20=
selectStringFromTables:=20self=20selectTables=20where:=20self=20=
selectWhereClauses=20,=20#('A.packageref=20=3D=20'=20).=0D=09arr=20_=20=
self=20connectionManager=20getResultOfQuery:=20query=20,=20primaryKey=20=
asString=20,=20'=20order=20by=20definitionOrder'.=0D=09^=20arr=0D=09=09=
collect:=20[:elem=20|=20self=20new=20initializeFromArray:=20elem]!=20!=0D=
=0D!ClassDefinitionRecord=20class=20methodsFor:=20'instance=20creation'=20=
stamp:=20'WFB=2010/11/2002=2003:18'!=0DnewForClass:=20aClass=20=
inPackage:=20aPackage=20=0D=09^=20self=20new=20initializeForClass:=20=
aClass=20inPackage:=20aPackage=20!=20!=0D=0D!ClassDefinitionRecord=20=
class=20methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2003:18'!=0D=
noQueryColumns=0D=09^=20super=20noQueryColumns=20,=20#(#classRecord=20=
#metaclassRecord=20package)!=20!=0D=0D!ClassDefinitionRecord=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2003:18'!=0D=
noResultColumns=0D=09^=20super=20noResultColumns=20,=20#(#classRecord=20=
#metaclassRecord=20package)!=20!=0D=0D!ClassDefinitionRecord=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/10/2002=2018:18'!=0DtableName=0D=
=09^'tw_pkgclasses'!=20!=0D=0D=0D!PersistentPKObject=20methodsFor:=20=
'storage'=20stamp:=20'WFB=2010/11/2002=2012:56'!=0DinsertInSession:=20=
session=20=0D=09|=20pk=20|=0D=09pk=20_=20self=20connectionManager=20=
getResultOfQuery:=20self=20class=20pkString=20inSession:=20session.=0D=09=
primaryKey=20_=20pk=20first=20first.=0D=09super=20insertInSession:=20=
session!=20!=0D=0D!PersistentPKObject=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/11/2002=2012:54'!=0DprimaryKey=0D=09^=20primaryKey!=20=
!=0D=0D=0D!Blob=20methodsFor:=20'conversion'=20stamp:=20'WFB=20=
10/10/2002=2017:27'!=0DasString=0D=09^=20(Base64MimeConverter=20=
mimeDecodeToChars:=20(ReadStream=20on:=20blobdata))=20contents!=20!=0D=0D=
!Blob=20methodsFor:=20'conversion'=20stamp:=20'WFB=2010/11/2002=20=
14:05'!=0DsetString:=20aString=20=0D=09self=20setString:=20aString=20=
type:=202!=20!=0D=0D!Blob=20methodsFor:=20'conversion'=20stamp:=20'WFB=20=
10/11/2002=2014:04'!=0DsetString:=20aString=20type:=20type=0D=09blobtype=20=
_=20type.=0D=09blobdata=20_=20(Base64MimeConverter=0D=09=09=09=09=
mimeNoLinebreakEncode:=20(ReadStream=20on:=20aString))=20contents=20=
asString!=20!=0D=0D=0D!PersistentPKObject=20class=20methodsFor:=20=
'tools'=20stamp:=20'WFB=2010/11/2002=2002:14'!=0DpkString=0D=09^=20=
'select=20nextVal('''=20,=20self=20tableName=20,=20'_sequence'')'!=20!=0D=
=0D=0D!Blob=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=20=
14:05'!=0DstoreData:=20aString=20inSession:=20session=20=0D=09|=20blob=20=
|=0D=09blob=20_=20Blob=20new.=0D=09blob=20setString:=20aString=20type:=20=
1.=0D=09blob=20insertInSession:=20session.=0D=09^=20blob=20primaryKey!=20=
!=0D=0D!Blob=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2012:54'!=0DstoreString:=20aString=20inSession:=20session=20=0D=
=09|=20blob=20|=0D=09blob=20_=20Blob=20new.=0D=09blob=20setString:=20=
aString.=0D=09blob=20insertInSession:=20session.=0D=09^=20blob=20=
primaryKey!=20!=0D=0D=0D!PersistentTraceObject=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/11/2002=2001:32'!=0DmarkDirty=0D=09self=20=
isClean=0D=09=09ifFalse:=20[^=20self].=0D=09trace=20_=20primarykey.=0D=09=
primarykey=20_=20nil!=20!=0D=0D!PersistentTraceObject=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/11/2002=2000:38'!=0Dname=0D=09^name!=20=
!=0D=0D!PersistentTraceObject=20methodsFor:=20'accessing'=20stamp:=20=
'WFB=2010/11/2002=2000:40'!=0Dname:=20anObject=0D=09name=20:=3D=20=
anObject!=20!=0D=0D!PersistentTraceObject=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/10/2002=2022:38'!=0Dtrace=0D=09^trace!=20!=0D=0D=
!PersistentTraceObject=20methodsFor:=20'initialize'=20stamp:=20'WFB=20=
10/11/2002=2000:38'!=0DinitializeFromArray:=20anArray=20=0D=09super=20=
initializeFromArray:=20anArray.=0D=09timestamp=20_=20Time=20=
dateAndTimeFromSeconds:=20timestamp=20+=202922938387.=0D=09name=20:=3D=20=
name=20asSymbol.!=20!=0D=0D!PersistentTraceObject=20methodsFor:=20=
'testing'=20stamp:=20'WFB=2010/11/2002=2013:49'!=0DisDirty=0D=09^=20=
primaryKey=20isNil=0D=09=09and:=20[trace=20isNil=20not]!=20!=0D=0D=
!PersistentTraceObject=20methodsFor:=20'testing'=20stamp:=20'WFB=20=
10/11/2002=2013:49'!=0DisNew=0D=09^=20primaryKey=20isNil=0D=09=09and:=20=
[trace=20isNil]!=20!=0D=0D!PersistentTraceObject=20methodsFor:=20=
'storage'=20stamp:=20'WFB=2010/11/2002=2002:38'!=0DpreInsert=0D=09=
timestamp=20_=20self=20class=20timestampNow.=0D=09username=20_=20self=20=
packageManager=20username.=0D=09super=20preInsert!=20!=0D=0D=
!PersistentTraceObject=20methodsFor:=20'printing'=20stamp:=20'WFB=20=
10/11/2002=2011:40'!=0DprintOn:=20aStream=0D=09=0D=09super=20printOn:=20=
aStream.=0D=09aStream=20nextPutAll:=20'=20named=20'.=0D=09name=20=
printOn:=20aStream=20!=20!=0D=0D=0D!MethodRecord=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/11/2002=2012:58'!=0D=
initializeForMethod:=20selector=20forClass:=20class=20=0D=09name=20:=3D=20=
selector.=0D=09timestamp=20:=3D=20self=20class=20timestampNow.=0D=09=
classname=20:=3D=20class=20theNonMetaClass=20fullName.=0D=09metastring=20=
:=3D=20class=20isMeta=20ifTrue:=20['T']=20ifFalse:=20['F'].=0D=09=
protocolName=20:=3D=20class=20organization=20categoryOfElement:=20=
selector.=0D=09source=20:=3D=20(class=20methodDict=20at:=20selector)=20=
getSource=20asString!=20!=0D=0D!MethodRecord=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/10/2002=2017:59'!=0D=
initializeFromArray:=20anArray=20=0D=09super=20initializeFromArray:=20=
anArray.=0D=09source=20_=20self=20decode:=20source!=20!=0D=0D=
!MethodRecord=20methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=20=
01:10'!=0DupdateForMethod:=20selector=20forClass:=20class=20=0D=09self=20=
initializeForMethod:=20selector=20forClass:=20class.=0D=09self=20=
markDirty!=20!=0D=0D!MethodRecord=20methodsFor:=20'initialize'=20stamp:=20=
'WFB=2010/11/2002=2013:04'!=0DupdateMethod:=20selector=20forClass:=20=
class=0D=09self=20initializeForMethod:=20selector=20forClass:=20class.=0D=
=09self=20markDirty!=20!=0D=0D!MethodRecord=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/11/2002=2000:37'!=0Dclassname=0D=09^classname!=20!=0D=0D=
!MethodRecord=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/11/2002=20=
12:58'!=0DinsertInSession:=20session=20=0D=09sourcecodeId=20:=3D=20Blob=20=
storeString:=20source=20inSession:=20session.=0D=09super=20=
insertInSession:=20session!=20!=0D=0D!MethodRecord=20methodsFor:=20=
'testing'=20stamp:=20'WFB=2010/11/2002=2001:24'!=0DisMeta=0D=09=
^metastring=20=3D=20'T'!=20!=0D=0D!MethodRecord=20methodsFor:=20=
'storage'=20stamp:=20'WFB=2010/11/2002=2012:55'!=0DcreateRelationto:=20=
package=20inSession:=20session=20=0D=09|=20query=20|=0D=09query=20_=20=
'INSERT=20INTO=20tw_methods=20(packageref,=20methodref)=20values=20('=20=
,=20package=20primaryKey=20asString=20,=20',=20'=20,=20self=20primaryKey=20=
asString=20,=20')'.=0D=09self=20connectionManager=20getResultOfQuery:=20=
query=20inSession:=20session!=20!=0D=0D=0D!PersistentTraceCommentObject=20=
methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=2012:50'!=0D=
initializeFromArray:=20anArray=20=0D=09super=20initializeFromArray:=20=
anArray.=0D=09comment=20_=20self=20decode:=20comment!=20!=0D=0D=
!PersistentTraceCommentObject=20methodsFor:=20'accessing'=20stamp:=20=
'WFB=2010/11/2002=2000:30'!=0Dcomment=0D=09^comment=0D!=20!=0D=0D=
!PersistentTraceCommentObject=20methodsFor:=20'accessing'=20stamp:=20=
'WFB=2010/11/2002=2000:33'!=0Dcomment:=20anObject=20=0D=09comment=20=3D=20=
anObject=20ifTrue:=20[^self].=0D=09comment=20_=20anObject.=0D=09self=20=
markDirty!=20!=0D=0D!PersistentTraceCommentObject=20methodsFor:=20=
'storage'=20stamp:=20'WFB=2010/11/2002=2016:26'!=0DinsertInSession:=20=
session=20=0D=09(comment=20isNil=0D=09=09=09or:=20[comment=20=3D=20''])=0D=
=09=09ifTrue:=20[commentId=20_=200]=0D=09=09ifFalse:=20[commentId=20_=20=
Blob=20storeString:=20comment=20inSession:=20session].=0D=09super=20=
insertInSession:=20session!=20!=0D=0D=0D!ClassRecord=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/10/2002=2023:36'!=0D=
buildDefinitionForClass:=20aClass=20=0D=09|=20typeOfClass=20str=20|=0D=09=
typeOfClass=20_=20aClass=20typeOfClass.=0D=09typeOfClass=20=3D=20#normal=0D=
=09=09ifTrue:=20[typeOfClass=20_=20#none].=0D=09str=20_=20=
ReadWriteStream=20on:=20String=20new.=0D=09str=20nextPutAll:=20aClass=20=
namespace;=0D=09=09=20nextPutAll:=20'=20defineClass:=20#';=0D=09=09=20=
nextPutAll:=20aClass=20name;=0D=09=09=20cr;=0D=09=09=20tab;=0D=09=09=20=
nextPutAll:=20'superclass:=20#{';=0D=09=09=20nextPutAll:=20aClass=20=
superclass=20fullName;=20nextPut:=20$};=0D=09=09=20cr;=0D=09=09=20tab;=0D=
=09=09=20nextPutAll:=20'indexedType:=20#';=0D=09=09=20nextPutAll:=20=
typeOfClass;=0D=09=09=20cr;=0D=09=09=20tab;=0D=09=09=20nextPutAll:=20=
'private:=20false';=0D=09=09=20cr;=0D=09=09=20tab;=0D=09=09=20=
nextPutAll:=20'instanceVariableNames:=20'''.=0D=09aClass=20instVarNames=0D=
=09=09do:=20[:elem=20|=20str=20nextPutAll:=20elem]=0D=09=09separatedBy:=20=
[str=20space].=0D=09str=20nextPut:=20$';=0D=09=09=20cr;=0D=09=09=20tab.=0D=
=09str=20nextPutAll:=20'classInstanceVariableNames:=20'''.=0D=09aClass=20=
class=20instVarNames=0D=09=09do:=20[:elem=20|=20str=20nextPutAll:=20=
elem]=0D=09=09separatedBy:=20[str=20space].=0D=09str=20nextPut:=20$';=0D=09=
=09=20cr;=0D=09=09=20tab.=0D=09str=20nextPutAll:=20'imports:=20''''';=0D=09=
=09=20cr;=0D=09=09=20tab;=0D=09=09=20nextPutAll:=20'category:=20''';=0D=09=
=09=20nextPutAll:=20aClass=20category;=0D=09=09=20nextPut:=20$'.=0D=09=
^str=20contents=0D!=20!=0D=0D!ClassRecord=20methodsFor:=20'initialize'=20=
stamp:=20'WFB=2010/10/2002=2023:59'!=0DbuildDefinitionForMetaclass:=20=
aClass=20=0D=09|=20str=20|=0D=09str=20_=20ReadWriteStream=20on:=20String=20=
new.=0D=09str=20nextPutAll:=20aClass=20fullName;=0D=09=09=20nextPutAll:=20=
'=20class=0D=09instanceVariableNames:=20'''.=0D=09aClass=20class=20=
instVarNames=0D=09=09do:=20[:elem=20|=20str=20nextPutAll:=20elem]=0D=09=09=
separatedBy:=20[str=20space].=0D=09str=20nextPut:=20$'.=0D=09^=20str=20=
contents!=20!=0D=0D!ClassRecord=20methodsFor:=20'initialize'=20stamp:=20=
'WFB=2010/11/2002=2012:57'!=0DinitializeForClass:=20aClass=20=0D=09=
environmentString=20:=3D=20'Root.Smalltalk'.=0D=09superclass=20:=3D=20=
aClass=20superclass=20name.=0D=09definition=20:=3D=20self=20=
buildDefinitionForClass:=20aClass.=0D=09environmentString=20:=3D=20=
aClass=20namespace.=0D=09name=20:=3D=20aClass=20name.=0D=09timestamp=20=
:=3D=20self=20class=20timestampNow!=20!=0D=0D!ClassRecord=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/11/2002=2012:57'!=0D=
initializeForMetaclass:=20aClass=20=0D=09environmentString=20:=3D=20=
'Root.Smalltalk'.=0D=09superclass=20:=3D=20aClass=20superclass=20class=20=
name.=0D=09definition=20:=3D=20self=20buildDefinitionForMetaclass:=20=
aClass.=0D=09environmentString=20:=3D=20aClass=20namespace.=0D=09name=20=
:=3D=20aClass=20class=20name.=0D=09timestamp=20:=3D=20self=20class=20=
timestampNow!=20!=0D=0D!ClassRecord=20methodsFor:=20'initialize'=20=
stamp:=20'WFB=2010/10/2002=2017:59'!=0DinitializeFromArray:=20anArray=20=0D=
=09super=20initializeFromArray:=20anArray.=0D=09definition=20_=20self=20=
decode:=20definition!=20!=0D=0D!ClassRecord=20methodsFor:=20'initialize'=20=
stamp:=20'WFB=2010/11/2002=2000:59'!=0DupdateForClass:=20aClass=20=0D=09=
self=20initializeForClass:=20aClass.=0D=09self=20markDirty!=20!=0D=0D=
!ClassRecord=20methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=20=
00:59'!=0DupdateForMetaclass:=20aClass=20=0D=0D=09self=20=
initializeForMetaclass:=20aClass.=0D=09self=20markDirty!=20!=0D=0D=
!ClassRecord=20methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=20=
12:57'!=0DinsertInSession:=20session=20=0D=09definitionId=20:=3D=20Blob=20=
storeString:=20definition=20inSession:=20session.=0D=09super=20=
insertInSession:=20session!=20!=0D=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2016:07'!=0Dbinfile=0D=09=
^binfile!=20!=0D=0D!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/10/2002=2016:07'!=0Dbinfile:=20anObject=0D=09binfile=20:=3D=20=
anObject!=20!=0D=0D!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/11/2002=2013:31'!=0Dblessinglevel=0D=09^blessingLevel!=20!=0D=0D=
!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/11/2002=20=
13:31'!=0Dblessinglevel:=20anObject=20=0D=09blessingLevel=20:=3D=20=
anObject!=20!=0D=0D!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=20=
10/11/2002=2000:52'!=0DchangeSet=0D=09^=20changeSet!=20!=0D=0D!Package=20=
methodsFor:=20'accessing'=20stamp:=20'WFB=2010/11/2002=2000:52'!=0D=
changeSet:=20anObject=20=0D=09changeSet=20_=20anObject!=20!=0D=0D=
!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/11/2002=20=
12:57'!=0Dcommentid=0D=09^commentId!=20!=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/11/2002=2012:57'!=0Dcommentid:=20=
anObject=20=0D=09commentId=20:=3D=20anObject!=20!=0D=0D!Package=20=
methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=2016:07'!=0D=
methodDefinitions=0D=09^methodDefinitions!=20!=0D=0D!Package=20=
methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=2016:07'!=0D=
methodDefinitions:=20anObject=0D=09methodDefinitions=20:=3D=20anObject!=20=
!=0D=0D!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=20=
16:09'!=0Dname=0D=09^=20name!=20!=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2016:06'!=0Dname:=20anObject=0D=09=
name=20:=3D=20anObject!=20!=0D=0D!Package=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/11/2002=2013:31'!=0Dparcelid=0D=09^parcelId!=20!=0D=0D=
!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/11/2002=20=
13:31'!=0Dparcelid:=20anObject=20=0D=09parcelId=20:=3D=20anObject!=20!=0D=
=0D!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=20=
16:06'!=0Dprimarykey=0D=09^primarykey!=20!=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2016:06'!=0Dprimarykey:=20=
anObject=0D=09primarykey=20:=3D=20anObject!=20!=0D=0D!Package=20=
methodsFor:=20'accessing'=20stamp:=20'WFB=2010/11/2002=2013:31'!=0D=
propertiesid=0D=09^propertiesId!=20!=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/11/2002=2013:31'!=0Dpropertiesid:=20=
anObject=20=0D=09propertiesId=20:=3D=20anObject!=20!=0D=0D!Package=20=
methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=2016:06'!=0D=
timestamp=0D=09^timestamp!=20!=0D=0D!Package=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/10/2002=2016:06'!=0Dtimestamp:=20anObject=0D=09=
timestamp=20:=3D=20anObject!=20!=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2016:07'!=0Dtrace=0D=09^trace!=20=
!=0D=0D!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=20=
16:07'!=0Dtrace:=20anObject=0D=09trace=20:=3D=20anObject!=20!=0D=0D=
!Package=20methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=20=
16:07'!=0Dusername=0D=09^username!=20!=0D=0D!Package=20methodsFor:=20=
'accessing'=20stamp:=20'WFB=2010/10/2002=2016:07'!=0Dusername:=20=
anObject=0D=09username=20:=3D=20anObject!=20!=0D=0D!Package=20=
methodsFor:=20'accessing'=20stamp:=20'WFB=2010/10/2002=2016:06'!=0D=
version=0D=09^version!=20!=0D=0D!Package=20methodsFor:=20'accessing'=20=
stamp:=20'WFB=2010/10/2002=2016:06'!=0Dversion:=20anObject=0D=09version=20=
:=3D=20anObject!=20!=0D=0D!Package=20methodsFor:=20'class=20change'=20=
stamp:=20'WFB=2010/11/2002=2015:13'!=0DaddClass:=20aClass=20=0D=09|=20=
class=20|=0D=09class=20_=20aClass=20theNonMetaClass.=0D=09=
(classDefinitions=0D=09=09includesKey:=20class=20name)=0D=09=09ifTrue:=20=
[^=20self=20changeClass:=20class].=0D=09classDefinitions=0D=09=09at:=20=
class=20name=0D=09=09put:=20(ClassDefinitionRecord=20newForClass:=20=
class=20inPackage:=20self)!=20!=0D=0D!Package=20methodsFor:=20'class=20=
change'=20stamp:=20'WFB=2010/11/2002=2014:32'!=0DaddClassComment:=20=
aClass=20=0D=09|=20class=20|=0D=09class=20_=20aClass=20theNonMetaClass.=0D=
=09(classDefinitions=20at:=20class=20name)=20classRecord=20comment:=20=
class=20organization=20classComment!=20!=0D=0D!Package=20methodsFor:=20=
'class=20change'=20stamp:=20'WFB=2010/11/2002=2017:25'!=0DaddMethod:=20=
selector=20forClass:=20class=20=0D=09(self=20methodRecordNamed:=20=
selector=20forClass:=20class)=20isNil=0D=09=09ifFalse:=20[^=20self=20=
updateMethod:=20selector=20forClass:=20class].=0D=09(class=20methodDict=20=
includesKey:=20selector)=20ifFalse:=20[^self].=0D=09(self=20=
methodRecordsForClass:=20class)=0D=09=09at:=20selector=0D=09=09put:=20=
(MethodRecord=20newForMethod:=20selector=20forClass:=20class)!=20!=0D=0D=
!Package=20methodsFor:=20'class=20change'=20stamp:=20'WFB=2010/11/2002=20=
18:12'!=0DchangeClass:=20aClass=20=0D=09|=20class=20|=0D=09class=20_=20=
aClass=20theNonMetaClass.=0D=09(classDefinitions=0D=09=09at:=20class=20=
name=0D=09=09ifAbsent:=20[^=20self=20addClass:=20class])=0D=09=09=
updateForClass:=20class!=20!=0D=0D!Package=20methodsFor:=20'class=20=
change'=20stamp:=20'WFB=2010/11/2002=2017:23'!=0DinsertInSession:=20=
session=20=0D=09|=20totalRecords=20classDefs=20methodDefs=20|=0D=09=
propertiesId=20_=20Blob=20storeData:=20properties=20inSession:=20=
session.=0D=09version=20_=20self=20getNewVersionNumberInSession:=20=
session.=0D=09super=20insertInSession:=20session.=0D=09classDefs=20_=20=
classDefinitions=20values.=0D=09methodDefs=20_=20OrderedCollection=20=
new.=0D=09methodDefinitions=20values=0D=09=09do:=20[:elem=20|=20=
methodDefs=20addAll:=20elem=20values].=0D=09totalRecords=20_=20classDefs=20=
size=20+=20methodDefs=20size.=0D=09Transcript=20cr;=20show:=20'Clean=20=
classDefs=20:';=20show:=20(classDefs=0D=09=09=09select:=20[:elem=20|=20=
elem=20isClean])=20size=20asString.=0D=09Transcript=20cr;=20show:=20=
'Clean=20methodDefs=20:';=20show:=20(methodDefs=0D=09=09=09select:=20=
[:elem=20|=20elem=20isClean])=20size=20asString.=0D=09classDefs=0D=09=09=
keysAndValuesDo:=20[:i=20:elem=20|=20=0D=09=09=09elem=20storeInSession:=20=
session.=0D=09=09=09self=20progressIndicate:=20i=20of:=20totalRecords].=0D=
=09methodDefs=0D=09=09keysAndValuesDo:=20[:i=20:elem=20|=20=0D=09=09=09=
elem=20storeInSession:=20session.=0D=09=09=09elem=20createRelationto:=20=
self=20inSession:=20session.=0D=09=09=09self=20progressIndicate:=20i=20+=20=
classDefs=20size=20of:=20totalRecords]!=20!=0D=0D!Package=20methodsFor:=20=
'class=20change'=20stamp:=20'WFB=2010/11/2002=2014:38'!=0D=
methodRecordNamed:=20selector=20forClass:=20class=20=0D=09^=20(self=20=
methodRecordsForClass:=20class)=0D=09=09at:=20selector=0D=09=09ifAbsent:=20=
[]!=20!=0D=0D!Package=20methodsFor:=20'class=20change'=20stamp:=20'WFB=20=
10/11/2002=2014:35'!=0DmethodRecordsForClass:=20class=20=0D=09=
^(methodDefinitions=20at:=20class=20ifAbsentPut:=20[Dictionary=20new])=0D=
!=20!=0D=0D!Package=20methodsFor:=20'class=20change'=20stamp:=20'WFB=20=
10/11/2002=2014:29'!=0DremoveClass:=20aClassName=20=0D=09=
(classDefinitions=20includesKey:=20aClassName)=20=0D=09=09ifTrue:=20[=0D=09=
classDefinitions=20removeKey:=20aClassName]!=20!=0D=0D!Package=20=
methodsFor:=20'class=20change'=20stamp:=20'WFB=2010/11/2002=2014:40'!=0D=
removeSelector:=20selector=20forClass:=20class=20=0D=09|=20methodDef=20|=0D=
=09(methodDef=20_=20self=20methodRecordNamed:=20selector=20forClass:=20=
class)=20isNil=0D=09=09ifTrue:=20[^=20self].=0D(self=20=
methodRecordsForClass:=20class)=20removeKey:=20methodDef=20selector!=20!=0D=
=0D!Package=20methodsFor:=20'class=20change'=20stamp:=20'WFB=20=
10/11/2002=2014:30'!=0DrenameClass:=20oldClassName=20to:=20newClassName=20=
=0D=09|=20classDef=20|=0D=09classDef=20_=20classDefinitions=20at:=20=
oldClassName.=0D=09classDefinitions=20removeKey:=20oldClassName.=0D=09=
classDef=20name:=20newClassName.=0D=09classDefinitions=20at:=20=
newClassName=20put:=20classDef!=20!=0D=0D!Package=20methodsFor:=20'class=20=
change'=20stamp:=20'WFB=2010/11/2002=2001:02'!=0D=
storeOutChangedMessages:=20changes=20forClass:=20class=20=0D=09changes=0D=
=09=09keysAndValuesDo:=20[:selector=20:changeType=20|=20changeType=20=3D=20=
#add=0D=09=09=09=09ifTrue:=20[self=20addMethod:=20selector=20forClass:=20=
class]=0D=09=09=09=09ifFalse:=20[changeType=20=3D=20#change=0D=09=09=09=09=
=09=09ifTrue:=20[self=20updateMethod:=20selector=20forClass:=20class]=0D=09=
=09=09=09=09=09ifFalse:=20[(changeType=20=3D=20#remove=20or:=20=
[changeType=20=3D=20#addedThenRemoved])=0D=09=09=09=09=09=09=09=09=
ifTrue:=20[self=20removeSelector:=20selector=20forClass:=20class]=0D=09=09=
=09=09=09=09=09=09ifFalse:=20[self=20error:=20'Unknown=20=
changeType']]]]!=20!=0D=0D!Package=20methodsFor:=20'class=20change'=20=
stamp:=20'WFB=2010/11/2002=2001:02'!=0DupdateMethod:=20selector=20=
forClass:=20class=20=0D=09|=20methodDef=20|=0D=09(methodDef=20_=20self=20=
methodRecordNamed:=20selector=20forClass:=20class)=20isNil=0D=09=09=
ifTrue:=20[^=20self=20addMethod:=20selector=20forClass:=20class].=0D=09=
methodDef=20updateMethod:=20selector=20forClass:=20class!=20!=0D=0D=
!Package=20methodsFor:=20'initialize'=20stamp:=20'WFB=2010/11/2002=20=
13:29'!=0DdefaultProperties=0D=09"Hackish=20plug=20since=20i=20don't=20=
know=20how=20to=20boss=20in/out=20vw=20boss.=0D=0DThe=20result=20can=20=
be=20obtained=20by=20evaluating=20following=20in=20VW:=0D=0Dstream=20:=3D=20=
OrderedCollection=20new=20readWriteStream.=0Db=20:=3D=20=
BinaryObjectStorage=20onNew:=20=20stream.=0Db=20nextPut:=20=
(IdentityDictionary=20new).=0Dstr=20:=3D=20String=20new:=20coll=20size.=0D=
stream=20contents=20keysAndValuesDo:=20[:i=20:elem=20|=20str=20at:=20=20=
i=20put:=20elem=20asCharacter].=0Dbase64Stream=20:=3D=20=20=
Base64EncodingWriteStream=20on:=20String=20new.=0Dbase64Stream=20=
lineBreaksEnabled:=20false.=0Dbase64Stream=20nextPutAll:=20stream=20=
contents.=0Dbase64Stream=20contents=20"=0D=09^=20=
'Qk9TUyA3IAGAAAAADgAAADAAAAAKAAAAdicXDkInCh1cCBQACCcFAnInChmugAQ1zwkUGZgiE=
g2AgQAE6YUGJrVDb3JlLklkZW50aXR5RGljdGlvbmFyeUNvcmUuQXJyYXkAAAAGAAAACAAAAAA=
AAUADAAAAAHRhbGx5dmFsdWVBcnJheQAKAA4AEgAAAAIAAAAIAAAAAAABQAsAAAAWd2l0aEtle=
XNBbmRWYWx1ZXM6ABoAHgAi'!=20!=0D=0D!Package=20methodsFor:=20'initialize'=20=
stamp:=20'WFB=2010/11/2002=2014:26'!=0Dinitialize=0D=09super=20=
initialize.=0D=09classDefinitions=20_=20Dictionary=20new.=0D=09=
methodDefinitions=20_=20Dictionary=20new.=0D=09properties=20_=20self=20=
decode:=20self=20defaultProperties!=20!=0D=0D!Package=20methodsFor:=20=
'initialize'=20stamp:=20'WFB=2010/11/2002=2014:50'!=0D=
initializeFromArray:=20anArray=20=0D=09super=20initializeFromArray:=20=
anArray.=0D=09properties=20_=20self=20decode:=20properties.=0D=09=
(ClassDefinitionRecord=20getAllInPackage:=20self)=0D=09=09do:=20[:elem=20=
|=20classDefinitions=20at:=20elem=20className=20put:=20elem].=0D=09=
(MethodRecord=20getAllInPackage:=20self)=0D=09=09do:=20[:elem=20|=20=
(self=20methodRecordsForClass:=20elem=20classname)=0D=09=09=09=09at:=20=
elem=20name=0D=09=09=09=09put:=20elem]!=20!=0D=0D!Package=20methodsFor:=20=
'retrieval'=20stamp:=20'WFB=2010/11/2002=2016:36'!=0D=
loadInNewChangeSetNamed:=20aString=20=0D=09^=20self!=20!=0D=0D!Package=20=
methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=2016:24'!=0D=
getNewVersionNumberInSession:=20session=20=0D=09|=20newVersionSuggestion=20=
res=20query=20|=0D=09newVersionSuggestion=20_=20self=20=
suggestNewVersionFor:=20version.=0D=09[query=20_=20'select=20count(*)=20=
from=20tw_package=20where=20name=20=3D=20'=20,=20name=20sqlString=20,=20=
'=20AND=20version=20=3D=20'=20,=20newVersionSuggestion=20sqlString.=0D=09=
res=20_=20self=20connectionManager=20getResultOfQuery:=20query=20=
inSession:=20session.=0D=09res=20first=20first=20=3D=20'0']=0D=09=09=
whileFalse:=20[newVersionSuggestion=20_=20self=20=
suggestAlternateVersionFor:=20newVersionSuggestion].=0D=09^=20=
newVersionSuggestion!=20!=0D=0D!Package=20methodsFor:=20'storage'=20=
stamp:=20'WFB=2010/11/2002=2002:18'!=0DpreInsert=0D=09name=20isNil=0D=09=09=
ifTrue:=20[name=20_=20changeSet=20name].=0D=09version=20isNil=0D=09=09=
ifTrue:=20[version=20_=20'1.0'].=0D=09super=20preInsert.=0D=09trace=20=
isNil=0D=09=09ifTrue:=20[trace=20:=3D=20'0'].=0D!=20!=0D=0D!Package=20=
methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=2011:56'!=0D=
progressIndicate:=20currentPos=20of:=20totalRecords=20=0D=09currentPos=20=
=3D=201=0D=09=09ifTrue:=20[Transcript=20cr;=20show:=20'Start=20writing=20=
out=20';=20show:=20totalRecords=20asString;=20show:=20'=20records:=20'].=0D=
=09currentPos=20=3D=20totalRecords=0D=09=09ifTrue:=20[Transcript=20show:=20=
'Done.'].=0D=09currentPos=20\\=2010=20=3D=200=0D=09=09ifTrue:=20=
[Transcript=20show:=20currentPos=20asString]=0D=09=09ifFalse:=20=
[Transcript=20show:=20'.']!=20!=0D=0D!Package=20methodsFor:=20'storage'=20=
stamp:=20'WFB=2010/11/2002=2012:02'!=0Dstore=0D=09self=20=
connectionManager=0D=09=09sessionDo:=20[:session=20|=20[self=20=
connectionManager=20beginTransactionInSession:=20session.=0D=09=09=09=
self=20insertInSession:=20session.=0D=09=09=09self=20connectionManager=20=
commitTransactionInSession:=20session]=0D=09=09=09=09ifCurtailed:=20=
[self=20connectionManager=20rollbackTransactionInSession:=20session]]!=20=
!=0D=0D!Package=20methodsFor:=20'storage'=20stamp:=20'WFB=2010/11/2002=20=
16:13'!=0DsuggestAlternateVersionFor:=20aString=20=0D=09^=20aString,=20=
'.1'!=20!=0D=0D!Package=20methodsFor:=20'storage'=20stamp:=20'WFB=20=
10/11/2002=2016:21'!=0DsuggestNewVersionFor:=20aString=20=0D=09|=20last=20=
|=0D=09aString=20isNil=20ifTrue:=20[^'1.0'].=0D=09last=20_=20aString=20=
copyAfterLast:=20$..=0D=09last=20isEmpty=0D=09=09ifTrue:=20[last=20_=20'=20=
1.0']=0D=09=09ifFalse:=20[last=20_=20(last=20asInteger=20+=201)=20=
asString].=0D=09^=20(aString=20copyUpToLast:=20$.)=0D=09=09,=20'.'=20,=20=
last!=20!=0D=0D=0D!PersistentTraceObject=20class=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/10/2002=2023:50'!=0DtimestampNow=0D=09"Peeked=20at=20=
VW=20implementation"=0D=09^((Time=20now=20asSeconds=20+=20Date=20today=20=
asSeconds)=20-=202922938387)!=20!=0D=0D=0D!MethodRecord=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2000:15'!=0D=
noQueryColumns=0D=09^=20super=20noQueryColumns=20,=20#(#source=20)!=20!=0D=
=0D!MethodRecord=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/10/2002=2018:01'!=0DselectArgsString=0D=09^=20super=20=
selectArgsString=20,=20',=20B.blobdata'!=20!=0D=0D!MethodRecord=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/10/2002=2018:01'!=0D=
selectTables=0D=09^=20super=20selectTables=20,=20#('TW_BLOB=20B'=20)!=20=
!=0D=0D!MethodRecord=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/10/2002=2018:01'!=0DselectWhereClauses=0D=09^=20super=20=
selectWhereClauses=20,=20#('B.primarykey=20=3D=20A.sourcecodeid'=20)!=20=
!=0D=0D!MethodRecord=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/10/2002=2018:03'!=0DtableName=0D=09^'tw_method'!=20!=0D=0D=
!MethodRecord=20class=20methodsFor:=20'instance=20creation'=20stamp:=20=
'WFB=2010/11/2002=2012:55'!=0DgetAllInPackage:=20aPackage=20=0D=09|=20=
primaryKey=20arr=20query=20|=0D=09primaryKey=20_=20aPackage=20=
primaryKey.=0D=09query=20_=20self=20selectStringFromTables:=20self=20=
selectTables=20,=20#('tw_methods=20P'=20)=20where:=20self=20=
selectWhereClauses=20,=20#('P.methodref=20=3D=20A.primaryKey'=20=
'P.packageref=20=3D=20'=20).=0D=09arr=20_=20self=20connectionManager=20=
getResultOfQuery:=20query=20,=20primaryKey=20asString.=0D=09^=20arr=0D=09=
=09collect:=20[:elem=20|=20self=20new=20initializeFromArray:=20elem]!=20=
!=0D=0D!MethodRecord=20class=20methodsFor:=20'instance=20creation'=20=
stamp:=20'WFB=2010/11/2002=2000:48'!=0DnewForMethod:=20method=20=
forClass:=20class=20=0D=09^=20self=20new=20initializeForMethod:=20method=20=
forClass:=20class=20!=20!=0D=0D=0D!PersistentTraceCommentObject=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2000:16'!=0D=
noQueryColumns=0D=09^=20super=20noQueryColumns=20,=20#(#comment=20)!=20!=0D=
=0D!PersistentTraceCommentObject=20class=20methodsFor:=20'tools'=20=
stamp:=20'WFB=2010/11/2002=2012:10'!=0DselectArgsString=0D=09^=20super=20=
selectArgsString=20,=20',=20C.blobdata'!=20!=0D=0D=
!PersistentTraceCommentObject=20class=20methodsFor:=20'tools'=20stamp:=20=
'WFB=2010/11/2002=2012:35'!=0DselectTables=0D=09|=20st=20last=20|=0D=09=
st=20_=20super=20selectTables.=0D=09last=20_=20st=20removeLast=20,=20'=20=
LEFT=20OUTER=20JOIN=20tw_blob=20C=20ON=20(A.commentId=20=3D=20=
C.primarykey=20)'.=0D=09st=20add:=20last.=0D=09^=20st!=20!=0D=0D=0D=
!ClassRecord=20class=20methodsFor:=20'instance=20creation'=20stamp:=20=
'WFB=2010/11/2002=2012:55'!=0DgetAllInPackage:=20aPackage=20=0D=09|=20=
primaryKey=20arr=20query=20|=0D=09primaryKey=20_=20aPackage=20=
primaryKey.=0D=09query=20_=20self=20selectStringFromTables:=20self=20=
selectTables=20,=20#('tw_pkgclasses=20P'=20)=20where:=20self=20=
selectWhereClauses=20,=20#('P.classref=20=3D=20A.primarykey'=20=
'P.packageref=20=3D=20'=20).=0D=09arr=20_=20self=20connectionManager=20=
getResultOfQuery:=20query=20,=20primaryKey=20asString.=0D=09^=20arr=0D=09=
=09collect:=20[:elem=20|=20self=20new=20initializeFromArray:=20elem]!=20=
!=0D=0D!ClassRecord=20class=20methodsFor:=20'instance=20creation'=20=
stamp:=20'WFB=2010/10/2002=2023:15'!=0DnewForClass:=20aClass=0D=09^self=20=
new=20initializeForClass:=20aClass!=20!=0D=0D!ClassRecord=20class=20=
methodsFor:=20'instance=20creation'=20stamp:=20'WFB=2010/10/2002=20=
23:59'!=0DnewForMetaclass:=20aClass=20=0D=09^=20self=20new=20=
initializeForMetaclass:=20aClass!=20!=0D=0D!ClassRecord=20class=20=
methodsFor:=20'instance=20creation'=20stamp:=20'WFB=2010/11/2002=20=
00:15'!=0DnoQueryColumns=0D=09^=20super=20noQueryColumns=20,=20=
#(#definition=20)!=20!=0D=0D!ClassRecord=20class=20methodsFor:=20=
'instance=20creation'=20stamp:=20'WFB=2010/10/2002=2017:40'!=0D=
selectArgsString=0D=09^super=20selectArgsString,=20',=20B.blobdata'!=20!=0D=
=0D!ClassRecord=20class=20methodsFor:=20'instance=20creation'=20stamp:=20=
'WFB=2010/10/2002=2017:51'!=0DselectTables=0D=09^=20super=20selectTables=20=
,=20#('TW_BLOB=20B')!=20!=0D=0D!ClassRecord=20class=20methodsFor:=20=
'instance=20creation'=20stamp:=20'WFB=2010/10/2002=2017:51'!=0D=
selectWhereClauses=0D=09^=20super=20selectWhereClauses=20,=20=
#('B.primarykey=20=3D=20A.definitionid')!=20!=0D=0D=0D!DataElement=20=
class=20methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2012:09'!=0D=
noQueryColumns=0D=09^=20super=20noQueryColumns=20,=20#(=20#definition=20=
)!=20!=0D=0D!DataElement=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2012:09'!=0DselectArgsString=0D=09^=20super=20=
selectArgsString=20,=20',=20D.blobdata'!=20!=0D=0D!DataElement=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2012:09'!=0D=
selectTables=0D=09^=20super=20selectTables=20,=20#('TW_BLOB=20D'=20)!=20=
!=0D=0D!DataElement=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2012:09'!=0DselectWhereClauses=0D=09^=20super=20=
selectWhereClauses=20,=20#('D.primarykey=20=3D=20A.definitionId')!=20!=0D=
=0D=0D!Package=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2013:09'!=0DnoQueryColumns=0D=09^=20super=20noQueryColumns=20=
,=20#(#classDefinitions=20#methodDefinitions=20#changeSet=20=
#properties)!=20!=0D=0D!Package=20class=20methodsFor:=20'tools'=20stamp:=20=
'WFB=2010/11/2002=2000:53'!=0DnoResultColumns=0D=09^=20super=20=
noResultColumns=20,=20#(#classDefinitions=20#methodDefinitions=20=
changeSet)!=20!=0D=0D!Package=20class=20methodsFor:=20'tools'=20stamp:=20=
'WFB=2010/11/2002=2013:08'!=0DselectArgsString=0D=09^=20super=20=
selectArgsString=20,=20',=20P.blobdata'!=20!=0D=0D!Package=20class=20=
methodsFor:=20'tools'=20stamp:=20'WFB=2010/11/2002=2013:09'!=0D=
selectTables=0D=09^=20super=20selectTables=20,=20#('TW_BLOB=20P'=20)!=20=
!=0D=0D!Package=20class=20methodsFor:=20'tools'=20stamp:=20'WFB=20=
10/11/2002=2013:09'!=0DselectWhereClauses=0D=09^=20super=20=
selectWhereClauses=20,=20#('P.primarykey=20=3D=20A.propertiesId'=20)!=20=
!=0D=0D=0D!PgSqlConnectionManager=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'WFB=2010/7/2002=2022:01'!=0D=
defaultConnectionArgs=0D=0D=09^=20PGConnectionArgs=0D=09=09hostname:=20=
host=0D=09=09portno:=20port=0D=09=09databaseName:=20databaseName=0D=09=09=
userName:=20username=0D=09=09password:=20password!=20!=0D=0D=
!PgSqlConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/7/2002=2022:00'!=0DnewConnection=0D=09^=20=
PGConnection=20preferredConnectionClass=20new!=20!=0D=0D=
!PgSqlConnectionManager=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'WFB=2010/7/2002=2022:22'!=0DretrConnection=0D=09|=20=
aConnection=20|=0D=09aConnection=20_=20self=20newConnection.=0D=09=
aConnection=20startup:=20self=20defaultConnectionArgs.=0D=09^=20=
aConnection!=20!=0D=0D!PgSqlConnectionManager=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'WFB=2010/7/2002=2022:52'!=0D=
terminateConnection:=20aConnection=20=0D=09aConnection=20isNil=20=
ifFalse:[=0D=09aConnection=20terminate].=0D=09super=20=
terminateConnection:=20aConnection!=0D]style[(21=2011=2032=2011=2014=205=20=
22=2011)f1b,f1cblue;b,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i!=20!=0D=0D=
=0D!String=20methodsFor:=20'StORE'=20stamp:=20'WFB=2010/11/2002=20=
02:44'!=0DsqlString=0D=09^'''',self=20asString,=20''''!=20!=0D=0D=0D=
!UndefinedObject=20methodsFor:=20'StORE'=20stamp:=20'WFB=2010/11/2002=20=
01:40'!=0DsqlString=0D=09^'NULL'!=20!=0D=0DPgSqlConnectionManager=20=
removeSelector:=20#closeConnection:!=0DPgSqlConnectionManager=20=
removeSelector:=20#getConnection!=0DPackage=20class=20removeSelector:=20=
#columns!=0DPackage=20class=20removeSelector:=20#createDBTable!=0D=
Package=20class=20removeSelector:=20#getObjectWithID:!=0DPackage=20class=20=
removeSelector:=20#noColumns!=0DPackage=20class=20removeSelector:=20=
#selectString!=0DClassRecord=20class=20removeSelector:=20#columns!=0D=
ClassRecord=20class=20removeSelector:=20#noColumns!=0DClassRecord=20=
class=20removeSelector:=20#noResultColumns!=0DClassRecord=20class=20=
removeSelector:=20#selectString!=0DClassRecord=20class=20removeSelector:=20=
#selectWhereClausesString!=0DPersistentTraceCommentObject=20class=20=
removeSelector:=20#noColumns!=0DPersistentTraceCommentObject=20class=20=
removeSelector:=20#selectJoinClauses!=0DPersistentTraceCommentObject=20=
class=20removeSelector:=20#selectWhereClauses!=0DMethodRecord=20class=20=
removeSelector:=20#noColumns!=0DMethodRecord=20class=20removeSelector:=20=
#noResultColumns!=0DPackage=20removeSelector:=20=
#addClass:definitionOrder:!=0DPackage=20removeSelector:=20=
#classDefinitionNamed:!=0DPackage=20removeSelector:=20#classDefinitions!=0D=
Package=20removeSelector:=20#classDefinitions:!=0DPackage=20=
removeSelector:=20#getNewVersionNumber!=0DPackage=20removeSelector:=20=
#loadInNewChangeSet!=0DPackage=20removeSelector:=20#name1!=0D=
MethodRecord=20removeSelector:=20#hasRelation!=0DMethodRecord=20=
removeSelector:=20#markDirty!=0DBlob=20class=20removeSelector:=20=
#storeString:InSession:!=0DBlob=20removeSelector:=20#insertString!=0D=
PersistentPKObject=20removeSelector:=20#primarykey!=0D=
ClassDefinitionRecord=20class=20removeSelector:=20=
#newForClass:definitionOrder:!=0DClassDefinitionRecord=20class=20=
removeSelector:=20#noColumns!=0DPersistentObject=20class=20=
removeSelector:=20#columns!=0DClassDefinitionRecord=20removeSelector:=20=
#initializeForClass:definitionOrder:!=0DClassDefinitionRecord=20=
removeSelector:=20#storeInSession:!=0DPersistentObject=20removeSelector:=20=
#noColumns!=0DConnectionManager=20class=20removeSelector:=20#default!=0D=
ConnectionManager=20class=20removeSelector:=20#getResultOfQuery:!=0D=
ConnectionManager=20class=20removeSelector:=20#shutDown:!=0D=
ConnectionManager=20class=20removeSelector:=20#startup:!=0D=
ConnectionManager=20removeSelector:=20#maxConnections!=0DChangeSet=20=
removeSelector:=20#storeOutClassDefinition:on:definitionOrder:!=0D=

--Apple-Mail-30--192273036
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed


On woensdag, okt 30, 2002, at 12:21 Europe/Amsterdam, Cees de Groot 
wrote:

> Cees de Groot <cg at cdegroot.com> said:
>> I think that's basically it.
>>
> No it ain't, I forgot one feature that's really cool: GC. You can 
> instruct
> StORE to dump all versions below a certain blessing level prior to a 
> certain
> date. The idea is that this allows you to keep 'Released' stuff around
> forever, while cleaning up all 'Tested' stuff older than, say, a year 
> and all
> 'Development' stuff older than, say, three months.
>
>
> -- 
> Cees de Groot               http://www.cdegroot.com     
> <cg at cdegroot.com>
> GnuPG 1024D/E0989E8B 0016 F679 F38D 5946 4ECD  1986 F303 937F E098 9E8B
> Cogito ergo evigilo
>

--Apple-Mail-30--192273036--




More information about the Squeak-dev mailing list