* common/Database.cpp, common/newid.cpp, server/server.cpp:
Modify new ID checks so that code still runs when database is
unavailable, and events requiring new IDs fail cleanly.
* server/Connection.cpp: Report a failure to create a player
account if no ID available.
* rulesets/BaseMind.cpp: When processing appearance ops, handle
stamp more efficiently, report an error if ID is missing
from argument.
* server/IdlePSQLConnector.cpp, server/IdlePSQLConnector.h:
Implement re-connecting to the Database if connection is lost.
* rulesets/Character.cpp, rulesets/Entity.cpp, rulesets/Thing.cpp:
Ensure STAMP is present on appearance op args.
* server/CommListener.cpp, server/CommListener.h,
server/CommPeerListener.cpp, server/CommPeerListener.h,
server/CommSlaveListener.cpp, server/CommSlaveListener.h,
server/CommUnixListener.cpp, server/CommUnixListener.h:
Add a return value to method for creating new client socket
objects, and use it to return failure if no ID is available
from the database for a new object.
* rulesets/Py_Point3D.cpp, rulesets/Py_Vector3D.cpp,
rulesets/Python_API.cpp: Add "new" method for class wrappers, and
call the in place constructor from new rather than init. Re-write
internal function for creating new instances so it uses the "new"
method.
* rulesets/Py_Statistics.cpp: Remove some obsolete code inadvertedly
copied from another file. Comment out some unused code to get rid
of a warning.
* server/CommPSQLSocket.cpp: Clear the database connection from
destructor.
* tests/python_class.cpp: A new test for experimenting with new
Python wrappers.
* configure.ac: Require latest varconf for its new features.
* common/globals.cpp, tools/cyconfig.cpp: Use new varconf scope for
settings to more suitably handle user overidden config settings.
* aiclient/ClientConnection.cpp, aiclient/client.cpp,
client/client.cpp, common/Database.cpp, server/server.cpp,
server/slave.cpp, tools/AdminClient.h, tools/cyaddrules.cpp,
tools/cycmd.cpp: Use new varconf/config.h header.
* client/BaseClient.cpp, common/Database.cpp, rulesets/MemMap.cpp,
server/Connection.cpp, server/EntityFactory.cpp, server/Peer.cpp,
server/Persistance.cpp, server/Restoration.cpp,
server/ServerRouting.h: Update integer ID related checks now that
integerId() function has changed.
* common/Database.cpp, common/Database.h, common/id.h, common/id.cpp:
Make newId() functions return the integer value.
* common/newid.cpp: Break newId out into its own file, and make
it handle whether or not the database should issue IDs.
* server/Connection.cpp, server/Persistance.cpp,
server/WorldRouter.cpp, server/server.cpp: Simply generating IDs
by just using the newId() function, and use its return value.
* common/AtlasFileLoader.cpp, common/Database.cpp,
common/FormattedXMLWriter.cpp, common/Property.cpp,
common/accountbase.cpp, rulesets/Character.cpp,
rulesets/Entity_getLocation.h, rulesets/MemMap.cpp,
rulesets/Pedestrian.cpp, rulesets/Plant.cpp,
rulesets/Py_Object.cpp, rulesets/Thing.cpp,
server/Admin.cpp, server/Connection.cpp, server/EntityFactory.cpp,
server/WorldRouter.cpp, tools/AdminClient.cpp, tools/cycmd.cpp,
tools/cyconvertrules.cpp: After an Element has been checked
with isFoo(), it is more efficient to get its value using Foo()
rather than asFoo() which repeats the check.
* rulesets/Entity.h: Add a pointer to a Motion object to entities.
* rulesets/Thing.cpp: Add notes about Motion implementation.
Clean up some variable names.
* common/Database.cpp: Fix some lingering missuse of the varconf API.
* common/Database.cpp: Improve error reporting for query errors.
* common/const.cpp, common/const.h: Add full details and comments
for enable_database option.
* common/id.h, common/id.cpp: New ID generator for use when we
are not using the Database.
* common/AtlasFileLoader.cpp, common/AtlasFileLoader.h: Generic
class for loading Atlas data from a file.
* server/Connection.cpp, server/EntityFactory.h,
server/EntityFactory.cpp, server/Persistor.cpp,
server/WorldRouter.cpp, server/server.cpp:
Implement the enable_database option by wrapping all use of database
in if statements. Rules are loaded from files instead.
* common/Database.cpp, common/terrain_utils.cpp: Disable debugging
output.
* server/Persistor.cpp: Don't update the main entity table if we
have no attributes modified other than terrain.
* common/Database.cpp: Implement function for modifying array rows.
* common/const.cpp: Enable persistence for testing.
* common/terrain_utils.cpp: Implement function for updating terrain
in database after a change.
* rulesets/World.cpp, rulesets/attributes.h: Add an update flag for
terrain, and use it to indicate to the Persistor.
* rulesets/World.h: Add accessors for variables which track modified
terrain, and a function to clear them.
* server/Persistor.cpp: Implement call to function to update terrain
in database.
* server/Restoration.cpp: Ensure that if world entity is already
in database, it gets hooked up appropriatly.
* common/Database.cpp, common/Database.h: Fix queries on ID relation
tables. Add methods to result functions for decoding the contents
of fields more directly. Implement selecting from array tables.
* common/terrain_utils.cpp, common/terrain_utils.h: New functions
for handling terrain in array database tables.
* rulesets/World.cpp, rulesets/World.h: Add functionality to track
changes to the terrain for persistence purposes.
* server/EntityFactory.cpp, server/EntityFactory.h, server/server.cpp:
Modify the way world entity persistence is bootstrapped to be
more consistent.
* server/Persistor.cpp: Provide specialisations to handle world so
that terrain is persisted. Implement storing terrain at entity
creation.
* server/Restoration.cpp, server/Restoration.h: Remove obsolete
restoration code. Return a status more accuratly representing
when restoration fails because of error, or if there is nothing
to restore.
* server/Restorer.cpp, server/Restorer.h, server/Restorer_impl.h:
Convert to using methods for restoring data in the Database class.
Implement restoring terrain from the database.
* common/Database.cpp: Implement inserting into array tables.
Modify tables so that key columns are NOT NULL.
* server/Persistor.cpp: Test creating array rows.
* common/Database.cpp, common/Database.h: Add function to check
whether an Atlas table has a given key.
* tools/cyloadrules.cpp: Use hasKey() function to make sure we
don't get errors when inserting rules.
* client/CreatorClient.cpp, rulesets/BaseMind.cpp,
rulesets/MemEntity.cpp, rulesets/MemEntity.h,
rulesets/MemMap.cpp, rulesets/MemMap.h, rulesets/Py_Map.cpp:
Set time on memory entities when we update them.
* common/BaseWorld.h: Make object accessor const.
* common/Database.cpp, common/Database.h, common/accountbase.cpp,
server/Connection.cpp, server/Persistance.cpp,
server/WorldRouter.cpp: Rename function to get new ID from
database to more correctly reflect its role.
* rulesets/PythonMindScript.cpp: Use get rather than getAdd
to sort out to and from of ops send to mind scripts.
* common/Database.h, common/Database.cpp: Modify relation code
to allow partial support for foreign key constrains to maintain
referential integrity. Full support will work when (if) primary
keys are inherited.
* server/Persistance.h, server/Persistance.cpp: Use updated relation
code for the accounts to characters relation.
* common/Database.cpp, common/Database.h: Add capability to specify
extra columns in generic Atlas database tables. Query the results
columns more robustly. Add a ruleset name column to the rules
table.
* server/EntityFactory.cpp: Re-write rule loader to handle new
format rules. Tighten up strictness of rule data. It is no
longer possible to specify defaults for location in the rule.
* tools/cyconvertrules.cpp: Ensure that the playable flag is
copied across when converting rules.
* tools/cyloadrules.cpp: Adapt to load the new format rules,
including handling the ruleset name column.
* common/Database.cpp, common/globals.cpp, rulesets/Area.cpp,
rulesets/Python_API.cpp, server/Connection.cpp,
server/Persistance.cpp: Ensure that all output goes either via
the log system, or only in debug macros.
* common/Database.cpp: Additional error reporting for bad update
queries.
* rulesets/Plant.h: Add accessor for number of fruits.
* rulesets/Python_API.cpp: Remove experimental Python type code.
* server/Persistor_impl.h: Fix persisting plant fruits, and
character attributes.
* common/Database.h: Add a registry for all tables.
* common/Database.cpp: Add names of all database tables to the
registry. Clean up, fix and fully implement running maintainance
commands on all tables on request.
* server/CommPSQLSocket.h, server/CommPSQLSocket.cpp: Implement
timing variables for handling regular running of database
maintainance commands. Add code to schedule the commands to
idle method, alternating between VACUUM FULL and VACUUM ANALYZE.
* server/server.cpp: Add database socket to the idle set, so it
gets called for regular database maintainance.
* server/CommPSQLSocket.cpp, common/Database.cpp: Clean up and
disable the debugging output.
* server/server.cpp: Add communications object to handle getting
the response to database queries without blocking.
* server/Persistance.h: Make database connection exposed so
that CommPSQLSocket can access it.
* server/CommPSQLSocket.cpp: Add debugging output, and implement
dispatching new queries once we have response to previous.
* common/Database.h, common/Database.cpp: Switch code to submit
all command queries via the async que, so we don't block
waiting for them to complete. Currently very noisy.
* server/CommPSQLSocket.cpp: Implement processing the response to
async queries.
* common/Database.h, common/Database.cpp: Add new data and interface
for managing a queue of queries so they can be processed
asyncronously.
* common/accountbase.h, common/accountbase.cpp: Add init
method required to make the database connection.
Clear up bugs in putAccount, and get putAccount to return
true/false correctly.
* common/Database.h, common/Database.cpp: Add extra arg to
updateSimpleRow so it can use any column as the key.
* tools/cypasswd.cpp: Remove an obsolete comment.
* common/Database.h, common/Database.cpp: Add the method required
to update a row of a simle database table.
* common/accountbase.h, common/accountbase.cpp: Re-implement
accountbase to use the new style accounts table.
* common/const.cpp, common/const.h: Add a const for the default
admin password hash, with a view to removing the plain text
default admin password.
* server/Persistance.cpp: Ensure that the database contains an
admin account on startup.
* common/Database.cpp: Move the call to register the ID generating
sequence out of the code for creating IG entity tables, as it is
also required by OOG entities, in particular the admin account
bootstrap.
* client/ObserverClient.cpp, client/ObserverClient.h,
client/client.cpp: Modify client so that it no longer attempts to
get account details from the database, or from a hard coded default.
It will now attempt a trusted login, or rely on password provided
by config option.
* server/Lobby.cpp: Add some debugging messages.
* server/CommServer.cpp: Tweak select loop so that closed connections
are cleaned up as soon as they are detected.
* rulesets/World.cpp: Make demo terrain a bit more mountainous.
* Convert entire codebase over to using Atlas-C++ 0.4.90, as
start of transition to 0.6 API.
* common/Database.h, server/Account.cpp, server/Account.h,
server/Admin.h, server/Connection.cpp, server/Player.h,
server/WorldRouter.cpp: Change the form of the getEntityId()
method in the database code and re-work the code that uses it.
* common/Database.cpp, common/Database.h: Use PQClear() to free
up database result objects, and provide a method to
free the contents of a DatabaseResult instance.
* common/Database.cpp: Add support for boolean columns.
* server/Persistor.cpp, server/Persistor_impl.h, server/Restorer.h,
server/Restorer_impl.h: Use a bool column to store whether or
not an entity has a bounding box, and use it apropriatly.
* common/Database.cpp, common/Database.h: Add functions for removing
relation rows. Modify entity select method to handle an empty loc
correctly.
* rulesets/Thing.cpp: Correct indenting.
* rulesets/World.cpp: Trigger update in SetOperation() correctly.
* server/Account.cpp, server/Persistance.cpp, server/Persistance.h:
Inform Persistance modules when the account loses a character, so
this change is reflected in the database.
* server/Persistor.cpp: Move comments into the correct place.
* server/Restoration.cpp, server/Restorer.cpp, server/Restorer.h,
server/Restorer_impl.h: Persist and restore the world entity
attributes. Remove redundant argument from Restorer::populate().
* server/Restorer.h, server/Restorer_impl.h: Add method to allow
decoding of a complete atlas map from a database record.
* common/Database.cpp: Ensure failure is only returned if string
is not empty.