work in progress
work in progress
seems OK
Looks OK now. The new conditions are better escaped:

New: WHERE `Owner` = "John" AND `JobID` IN ( 1234, 1235, 4567,
"456", "5454" ) AND `LastUpdate` < "2012-02-21 15:12:02.129897" ORDER
BY `order1` ASC LIMIT 100
Old: WHERE Owner='John' AND JobID in
("1234","1235","4567","456","5454") AND LastUpdate < '2012-02-21
15:12:02.129897' ORDER BY order1 ASC LIMIT 100
New method: _updateFields, _delete
Merge remote-tracking branch 'upstream/integration' into new_MySQL
Bug fix: connection -> conn
added quotes in ParametricInputData and ParametricInputSandbox arguments of the dirac-jobexec: Protects against semi-colon separated list (if this is the convention used).
vo is undefined if baseDir is specified.
Fix conflicts
First import of SSHLSFComputingElement
Working version of the LSF CE module. Some cleanup or the submitted scripts needed
Merge remote-tracking branch 'upstream/integration' into new_MySQL
NEW: MySQL enhanced funcionality
Test include for new public methods:

    buildCondition( self, condDict = None, older = None, newer = None,
                      timeStamp = None, orderAttribute = None, limit =
False ):

      Build SQL condition statement from provided condDict and other
extra check on
      a specified time stamp.
      The conditions dictionary specifies for each attribute one or a
List of possible
      values
      For compatibility with current usage it uses Exceptions to exit
in case of 
      invalid arguments


    insertFields( self, tableName, inFields = None, inValues = None,
conn = None ):

      Insert a new row in "tableName" assigning the values "inValues"
to the
      fields "inFields".
      String type values will be appropriately escaped.


    updateFields( self, tableName, updateFields = None, updateValues =
None,
                  condDict = None,
                  limit = False, conn = None,
                  older = None, newer = None,
                  timeStamp = None, orderAttribute = None ):

      Update "updateFields" from "tableName" with "updateValues".
      conditions lInFields = lInValues
      N records can match the condition
      return S_OK( tuple(Field,Value) )
      if outFields == None all fields in "tableName" are returned
      if inFields and inValues are None, no condition is imposed
      if limit is not False, the given limit is set
      inValues are properly escaped using the _escape_string method,
they can be single values or lists of values.


    deleteEntries( self, tableName,
                   condDict = None,
                   limit = False, conn = None,
                   older = None, newer = None,
                   timeStamp = None, orderAttribute = None ):

      Delete rows from "tableName" with
      conditions lInFields = lInValues
      N records can match the condition
      if inFields and inValues are None, no condition is imposed
      if limit is not False, the given limit is set
      inValues are properly escaped using the _escape_string method,
they can be single values or lists of values.


    getFields( self, tableName, outFields = None,
               condDict = None,
               limit = False, conn = None,
               older = None, newer = None,
               timeStamp = None, orderAttribute = None ):

      Select "outFields" from "tableName" with
      conditions lInFields = lInValues
      N records can match the condition
      return S_OK( tuple(Field,Value) )
      if outFields == None all fields in "tableName" are returned
      if limit is not False, the given limit is set
      inValues are properly escaped using the _escape_string method,
they can be single values or lists of values.

      for compatibility with other methods condDict keyed argument is
added


    getCounters( self, table, attrList, condDict = None, older = None,

                 newer = None, timeStamp = None, connection = False ):

      Count the number of records on each distinct combination of
AttrList, selected
      with condition defined by condDict and time stamps


    getDistinctAttributeValues( self, table, attribute, condDict =
None, older = None,
                                newer = None, timeStamp = None,
connection = False ):

      Get distinct values of a table attribute under specified
conditions
FIX: StalledJobAgent
- StalledTimeHours and FailedTimeHours are read each cycle
- StalledTimeHours and FailedTimeHours refer to Watchdog heartBeat
period (should be renamed)
- Remove duplicate call to JobLoggingInfo
- Add NormCPUTime
NEW: moved up two commands from LHCbDIRAC
NEW: Added client methods for VOBOXCache and SpaceTokenOccupancyCache
NEW: added addOrModify methods for VOBOXCache and
StorageElementOccupancyCache
NEW: VOBOX and StorageTokenOccupancy renaming. dateEffective to
lastCheckTime