diff --git a/datamodel-default.yml b/datamodel-default.yml index 9c618ed9cadb586ed1e3d16879661a9e5c5cdf0b..b3271416adfdb6bd23a1ced355c3850b81eefb70 100644 --- a/datamodel-default.yml +++ b/datamodel-default.yml @@ -58,5 +58,9 @@ Loan: datatype: DATETIME returned: datatype: DATETIME + returned Box version: + datatype: Box + borrowed Box version: + datatype: Box Location: diff --git a/loanpy/CHANGELOG.md b/loanpy/CHANGELOG.md index b85d8ecd53abcbef85ed12bec0db3752c79aeaa4..cdc64a1688db23371b49d67b03bac377e0eba963 100644 --- a/loanpy/CHANGELOG.md +++ b/loanpy/CHANGELOG.md @@ -8,10 +8,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## ### Added ### + * Support for borrowing multiple items ### Changed ### +* Removed name overrides in borrowed box versions + ### Deprecated ### ### Removed ### diff --git a/loanpy/integrationtests/basic_test.py b/loanpy/integrationtests/basic_test.py index 448f0ef02d1952071de3d82fd99e8693002a1030..f8f1eb24c432db7e6e522395ebf0220c1d86a295 100644 --- a/loanpy/integrationtests/basic_test.py +++ b/loanpy/integrationtests/basic_test.py @@ -54,7 +54,7 @@ TESTBOXNUMBER2 = '0124 TEST' TESTDESTINATION = 'TEST DEST' TESTCURRENTDESTINATION = 'TEST CUR DEST' TESTBORROWEREMAIL = 'test@example.com' -TESTRETURNDATE = "2025-03-04" +TESTRETURNDATE = "9999-03-04" TESTFN = "Alice" TESTLN = "Wunderland" @@ -286,7 +286,10 @@ def test_request_loan_multiple_items(loan_form_data_multi): assert response.stderr is None, response.stderr assert response.code == 0 loan = get_entity_by_id(loanid) - assert loan.get_property(BOX_BORROWED).value == box_versionids + # Assert that the ancient name override doesn't exist anymore + box_rt = db.get_entity_by_name(BOX.name) + assert loan.get_property(BOX_BORROWED.name).id != box_rt.id + assert loan.get_property(BOX_BORROWED.name).value == box_versionids assert loan.get_property(f"{LENT.name}").value.startswith("20") box1 = get_entity_by_name(TESTBOXNUMBER) box2 = get_entity_by_name(TESTBOXNUMBER2) @@ -377,7 +380,7 @@ def test_direct_call(loan_form_data_multi): data[F_LOAN] = loan.id confirm_loan(data) loan = db.execute_query(f"FIND loan with {COMMENT.name}='{TESTLOANCOMMENT}'", unique=True) - assert loan.get_property(BOX_BORROWED).value == box_before_confirm_versionids + assert loan.get_property(BOX_BORROWED.name).value == box_before_confirm_versionids assert loan.get_property(f"{LENT.name}").value.startswith("20") box1 = get_entity_by_name(TESTBOXNUMBER) box2 = get_entity_by_name(TESTBOXNUMBER2) @@ -418,8 +421,8 @@ def test_direct_call(loan_form_data_multi): loan = db.execute_query(f"FIND loan with {COMMENT.name}='{TESTLOANCOMMENT}'", unique=True) assert loan.get_property(f"{RETURNED.name}").value.startswith("20") assert loan.get_property(f"{RETURNED.name}").value.startswith("20") - assert loan.get_property(BOX_BORROWED).value == box_before_confirm_versionids - assert loan.get_property(BOX_RETURNED).value == box_before_return_versionids + assert loan.get_property(BOX_BORROWED.name).value == box_before_confirm_versionids + assert loan.get_property(BOX_RETURNED.name).value == box_before_return_versionids def modded_config(config): @@ -448,7 +451,7 @@ def test_no_location_setting(loan_form_data_multi): data[F_LOAN] = loanid confirm_loan(data) loan = get_entity_by_id(loanid) - assert loan.get_property(BOX_BORROWED).value == box_versionids + assert loan.get_property(BOX_BORROWED.name).value == box_versionids assert loan.get_property(f"{LENT.name}").value.startswith("20") box1 = get_entity_by_name(TESTBOXNUMBER) box2 = get_entity_by_name(TESTBOXNUMBER2) diff --git a/loanpy/src/loan/box_loan.py b/loanpy/src/loan/box_loan.py index f810c495c98bad87497831cf7228779f1bbb355e..37b9ef8ac600f6fbd398ba07cfbb3ee66b184d61 100644 --- a/loanpy/src/loan/box_loan.py +++ b/loanpy/src/loan/box_loan.py @@ -565,10 +565,10 @@ def get_borrowed_items_from(loan) -> db.Container: db.Container, borrowed items referenced by the given loan. Return value is a container with one element, even if only one item is referenced and the property value is not a list. """ - borrowed = loan.get_property(BOX_BORROWED) + borrowed = loan.get_property(BOX_BORROWED.name) if borrowed is None: raise RuntimeError( - f"Loan has no reference to a borrowed item. {BOX_BORROWED} property is missing." + f"Loan has no reference to a borrowed item. {BOX_BORROWED.name} property is missing." f"Loan ID: {loan.id}") elif not isinstance(borrowed.value, list): borrowed = [borrowed.value] diff --git a/loanpy/src/loan/conf.py b/loanpy/src/loan/conf.py index 12faabdda99fabe9fce0a2a88a0cd66b8584b3c6..a7c5e62afd17fe1a00b2ed7c8cea94959b60c0e4 100644 --- a/loanpy/src/loan/conf.py +++ b/loanpy/src/loan/conf.py @@ -36,8 +36,5 @@ RETURN_REQUESTED = db.Property(name=ps['RETURN_REQUESTED'], datatype=db.DATETIME RETURN_ACCEPTED = db.Property(name=ps['RETURN_ACCEPTED'], datatype=db.DATETIME) RETURNED = db.Property(name=ps['RETURNED'], datatype=db.DATETIME) BOX_NUMBER = db.Property(name=ps['BOX_NUMBER'], datatype=db.TEXT) - -# Other Strings -# TODO: Adapt datamodel and remove name override -BOX_RETURNED = "Box (returned)" -BOX_BORROWED = "Box (borrowed)" +BOX_RETURNED = db.Property(name=ps['BOX_RETURNED'], datatype=rts['BOX']) +BOX_BORROWED = db.Property(name=ps['BOX_BORROWED'], datatype=rts['BOX']) diff --git a/loanpy/src/loan/confirm_loan.py b/loanpy/src/loan/confirm_loan.py index 9e5b9825e6de5cdf3f92a7740e18bd9e6e0646b8..183a1c46a079f51cc610375fb13b27fc87e385cd 100755 --- a/loanpy/src/loan/confirm_loan.py +++ b/loanpy/src/loan/confirm_loan.py @@ -33,7 +33,8 @@ from .box_loan import (BOX, BOX_BORROWED, DESTINATION, F_LOAN, LENT, S_LENT, S_L def _set_lent_box(loan): """ Store the exact versions of borrowed items when it was delivered to the borrower. """ references = set_references_to_current_version(loan.get_property(BOX).value) - loan.add_property(id=BOX.id, name=BOX_BORROWED, value=references, + borrowed_prop = db.get_entity_by_name(BOX_BORROWED.name, role="PROPERTY") + loan.add_property(id=borrowed_prop.id, value=references, datatype=db.LIST(BOX.name) if isinstance(references, list) else BOX.name) loan.update() diff --git a/loanpy/src/loan/default_config.ini b/loanpy/src/loan/default_config.ini index 7b49b0fa1978a4a801689b4c2eb242b3513586cd..c086fc8ff3c3b7b285a3eafbbfdd686f16ad6a8c 100644 --- a/loanpy/src/loan/default_config.ini +++ b/loanpy/src/loan/default_config.ini @@ -23,3 +23,5 @@ RETURN_REQUESTED = returnRequested RETURN_ACCEPTED = returnAccepted RETURNED = returned BOX_NUMBER = Number +BOX_RETURNED = returned Box version +BOX_BORROWED = borrowed Box version diff --git a/loanpy/src/loan/manual_return.py b/loanpy/src/loan/manual_return.py index a2acab7bcb46a71c5a5419c66b1b604ad90e9047..8b0facb70fdb67fb105e61a2de3846696cf6d0ea 100755 --- a/loanpy/src/loan/manual_return.py +++ b/loanpy/src/loan/manual_return.py @@ -36,8 +36,9 @@ def _set_returned_box(loan): This stores the version of the box that was returned by a borrower. """ - references = set_references_to_current_version(loan.get_property(BOX_BORROWED).value) - loan.add_property(id=BOX.id, name=BOX_RETURNED, value=references, + references = set_references_to_current_version(loan.get_property(BOX_BORROWED.name).value) + returned_prop = db.get_entity_by_name(BOX_RETURNED.name, role="PROPERTY") + loan.add_property(id=returned_prop.id, value=references, datatype=db.LIST(BOX.name) if isinstance(references, list) else BOX.name) @@ -57,7 +58,7 @@ def set_content(loan): and "entity_loan.no_content_updates" in config["Misc"] and config["Misc"]["entity_loan.no_content_updates"]): return - items = loan.get_property(BOX_BORROWED).value + items = loan.get_property(BOX_BORROWED.name).value if not isinstance(items, list): items = [items] for item in items: diff --git a/loanpy/unittests/test_manual_return.py b/loanpy/unittests/test_manual_return.py index f1753dde016d3659a9a06e5746a1fcfd060f212b..5ae66eaf3bf74cbe2cdcf97e2bd2de14b2af8820 100644 --- a/loanpy/unittests/test_manual_return.py +++ b/loanpy/unittests/test_manual_return.py @@ -1,18 +1,28 @@ -from linkahead import Record +from linkahead import Record, Property +from unittest.mock import Mock, patch + from loan.box_loan import BOX, BOX_RETURNED, BOX_BORROWED -from loan.manual_return import _set_returned_box +from loan.manual_return import _set_returned_box, db + + +def mock_get_entity_by_name(name, role): + if name == BOX_RETURNED.name and role == "PROPERTY": + return Property(name=BOX_RETURNED.name, id=12345) + raise ValueError(f"Mock not defined for {name} with role {role}.") +@patch("loan.manual_return.db.get_entity_by_name", new=Mock(side_effect=mock_get_entity_by_name)) def test_set_returned_box(): loan = Record() - loan.add_property(BOX, name=BOX_BORROWED, value="1234@abcd") + loan.add_property(BOX, name=BOX_BORROWED.name, value="1234@abcd") assert len(loan.get_properties()) == 1 - assert loan.get_property(BOX_BORROWED).value == "1234@abcd" - assert loan.get_property(BOX_RETURNED) is None + assert loan.get_property(BOX_BORROWED.name).value == "1234@abcd" + assert loan.get_property(BOX_RETURNED.name) is None _set_returned_box(loan) assert len(loan.get_properties()) == 2 - assert loan.get_property(BOX_BORROWED).value == "1234@abcd" - assert loan.get_property(BOX_RETURNED).value == "1234@HEAD" + assert loan.get_property(BOX_BORROWED.name).value == "1234@abcd" + print(loan) + assert loan.get_property(12345).value == "1234@HEAD" diff --git a/test-profile/custom/other/restore/caosdb.dump.sql b/test-profile/custom/other/restore/caosdb.dump.sql index d601c7cc4af447b9f2a110907559dba56599f48c..d360bdbfc11744558f81dbb9d06c8bdf4b8e1368 100644 --- a/test-profile/custom/other/restore/caosdb.dump.sql +++ b/test-profile/custom/other/restore/caosdb.dump.sql @@ -80,6 +80,9 @@ CREATE TABLE `archive_data_type` ( LOCK TABLES `archive_data_type` WRITE; /*!40000 ALTER TABLE `archive_data_type` DISABLE KEYS */; +INSERT INTO `archive_data_type` VALUES +(0,103,126,101,2), +(0,101,126,107,2); /*!40000 ALTER TABLE `archive_data_type` ENABLE KEYS */; UNLOCK TABLES; @@ -248,8 +251,10 @@ LOCK TABLES `archive_entities` WRITE; /*!40000 ALTER TABLE `archive_entities` DISABLE KEYS */; INSERT INTO `archive_entities` VALUES (101,NULL,'RECORDTYPE',2,1), +(101,NULL,'RECORDTYPE',2,2), (102,NULL,'RECORDTYPE',2,1), (103,NULL,'RECORDTYPE',2,1), +(103,NULL,'RECORDTYPE',2,2), (122,NULL,'RECORD',2,1), (123,NULL,'RECORD',2,1); /*!40000 ALTER TABLE `archive_entities` ENABLE KEYS */; @@ -419,7 +424,9 @@ INSERT INTO `archive_name_data` VALUES (0,101,20,'Box','FIX',0,1), (0,102,20,'Person','FIX',0,1), (0,103,20,'Loan','FIX',0,1), -(0,122,20,'testbox','FIX',0,1); +(0,122,20,'testbox','FIX',0,1), +(0,101,20,'Box','FIX',0,2), +(0,103,20,'Loan','FIX',0,2); /*!40000 ALTER TABLE `archive_name_data` ENABLE KEYS */; UNLOCK TABLES; @@ -486,6 +493,24 @@ CREATE TABLE `archive_null_data` ( LOCK TABLES `archive_null_data` WRITE; /*!40000 ALTER TABLE `archive_null_data` DISABLE KEYS */; +INSERT INTO `archive_null_data` VALUES +(0,101,126,'RECOMMENDED',0,2), +(0,101,113,'RECOMMENDED',1,2), +(0,101,121,'RECOMMENDED',2,2), +(0,103,126,'RECOMMENDED',0,2), +(0,103,112,'RECOMMENDED',1,2), +(0,103,125,'RECOMMENDED',2,2), +(0,103,111,'RECOMMENDED',3,2), +(0,103,110,'RECOMMENDED',4,2), +(0,103,108,'RECOMMENDED',5,2), +(0,103,114,'RECOMMENDED',6,2), +(0,103,116,'RECOMMENDED',7,2), +(0,103,117,'RECOMMENDED',8,2), +(0,103,118,'RECOMMENDED',9,2), +(0,103,113,'RECOMMENDED',10,2), +(0,103,109,'RECOMMENDED',11,2), +(0,103,119,'RECOMMENDED',12,2), +(0,103,120,'RECOMMENDED',13,2); /*!40000 ALTER TABLE `archive_null_data` ENABLE KEYS */; UNLOCK TABLES; @@ -548,6 +573,9 @@ CREATE TABLE `archive_reference_data` ( LOCK TABLES `archive_reference_data` WRITE; /*!40000 ALTER TABLE `archive_reference_data` DISABLE KEYS */; +INSERT INTO `archive_reference_data` VALUES +(0,101,107,126,NULL,'REPLACEMENT',0,2), +(0,103,101,126,NULL,'REPLACEMENT',0,2); /*!40000 ALTER TABLE `archive_reference_data` ENABLE KEYS */; UNLOCK TABLES; @@ -665,6 +693,8 @@ INSERT INTO `data_type` VALUES (0,0,120,15), (0,0,125,15), (0,0,111,18), +(0,0,127,101), +(0,0,128,101), (0,103,126,101), (0,0,112,102), (0,0,108,107), @@ -817,7 +847,7 @@ CREATE TABLE `entities` ( PRIMARY KEY (`id`), KEY `entity_entity_acl` (`acl`), CONSTRAINT `entity_entity_acl` FOREIGN KEY (`acl`) REFERENCES `entity_acl` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=129 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -870,7 +900,9 @@ INSERT INTO `entities` VALUES (123,NULL,'RECORD',2), (124,NULL,'RECORD',2), (125,NULL,'PROPERTY',2), -(126,NULL,'_REPLACEMENT',0); +(126,NULL,'_REPLACEMENT',0), +(127,NULL,'PROPERTY',2), +(128,NULL,'PROPERTY',2); /*!40000 ALTER TABLE `entities` ENABLE KEYS */; UNLOCK TABLES; @@ -965,7 +997,9 @@ INSERT INTO `entity_ids` VALUES ('123',122), ('124',123), ('125',124), -('126',125); +('126',125), +('127',127), +('128',128); /*!40000 ALTER TABLE `entity_ids` ENABLE KEYS */; UNLOCK TABLES; @@ -1018,10 +1052,12 @@ INSERT INTO `entity_version` VALUES (24,NULL,'29a85dbc0ca204bdb436261cbb429415e2485344',1,NULL,'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'), (101,NULL,'6e5103dc495751a2f1725913796fea0e70881ad9',1,NULL,'abbefec0-f108-4026-a473-5587c5e8eb63'), (101,NULL,'add33a0ea854c88e41ebc33efee0ad6371e31f6f',2,1,'49cbd7aa-8c34-46a6-b291-134fd2f16afb'), +(101,NULL,'92d246b4e0ba04fd8cc362b6f5b44b4d9cc770ef',3,2,'c79390d1-787c-4640-8f5d-18127e99290f'), (102,NULL,'809d3320f8d23dae6aa8d2328ba2c004c4b20c16',1,NULL,'abbefec0-f108-4026-a473-5587c5e8eb63'), (102,NULL,'3eda50eb3d735c1f6798a52a3fba2d8ae5da340b',2,1,'49cbd7aa-8c34-46a6-b291-134fd2f16afb'), (103,NULL,'61dc0b1ca2124c5c95ec5a5623e89456ed44946f',1,NULL,'abbefec0-f108-4026-a473-5587c5e8eb63'), (103,NULL,'48f2c20151bcc6641a0fce491cce24f37b5c7f59',2,1,'49cbd7aa-8c34-46a6-b291-134fd2f16afb'), +(103,NULL,'ba0d9f97e9e8c5cb5938e8cc3e3550b40fa71ee9',3,2,'c79390d1-787c-4640-8f5d-18127e99290f'), (104,NULL,'a721a7d53605f921502ce588e7188af65dba0c0b',1,NULL,'abbefec0-f108-4026-a473-5587c5e8eb63'), (105,NULL,'810ece5493caba000c786a0f215d879f6cadf357',1,NULL,'abbefec0-f108-4026-a473-5587c5e8eb63'), (106,NULL,'723837036edd5d57f74d426238aade49dbccf8a8',1,NULL,'abbefec0-f108-4026-a473-5587c5e8eb63'), @@ -1045,7 +1081,9 @@ INSERT INTO `entity_version` VALUES (123,NULL,'f909c629e787d72e449e81508409c4a0acc0fb10',1,NULL,'d3dd1cca-cf29-42a5-aec1-0c162df9fc5e'), (123,NULL,'40aa3d619b1bd2c8ee787845542d82d03dbe6360',2,1,'b0e78639-d3e9-454d-aaac-856f5299d47d'), (124,NULL,'564c8b4954b94590e83769a5bc367f13cbaaca91',1,NULL,'f01fac04-1f04-4cec-955b-4aa091c29f5c'), -(125,NULL,'09e8317ee136da2e5c4ff2e7289a5d95bf7c76c8',1,NULL,'8c4d8797-0c40-479d-a648-813bba41819f'); +(125,NULL,'09e8317ee136da2e5c4ff2e7289a5d95bf7c76c8',1,NULL,'8c4d8797-0c40-479d-a648-813bba41819f'), +(127,NULL,'c9acac9113d771a3eed0c254668b362f1adab9e0',1,NULL,'b3b61ade-11cc-4eb7-8bf4-400233e7ff5b'), +(128,NULL,'5935ac687ecbe377b2a4f811fd77f65a6361a2b4',1,NULL,'b3b61ade-11cc-4eb7-8bf4-400233e7ff5b'); /*!40000 ALTER TABLE `entity_version` ENABLE KEYS */; UNLOCK TABLES; @@ -1271,7 +1309,9 @@ INSERT INTO `name_data` VALUES (0,122,20,'testbox','FIX',0), (0,123,20,'Henrik','FIX',0), (0,124,20,'im Büro','FIX',0), -(0,125,20,'expected_return','FIX',0); +(0,125,20,'expected_return','FIX',0), +(0,127,20,'returned Box version','FIX',0), +(0,128,20,'borrowed Box version','FIX',0); /*!40000 ALTER TABLE `name_data` ENABLE KEYS */; UNLOCK TABLES; @@ -1335,12 +1375,12 @@ CREATE TABLE `null_data` ( LOCK TABLES `null_data` WRITE; /*!40000 ALTER TABLE `null_data` DISABLE KEYS */; INSERT INTO `null_data` VALUES -(0,101,126,'RECOMMENDED',0), -(0,101,113,'RECOMMENDED',1), -(0,101,121,'RECOMMENDED',2), (0,102,104,'RECOMMENDED',0), (0,102,105,'RECOMMENDED',1), (0,102,106,'RECOMMENDED',2), +(0,101,126,'RECOMMENDED',0), +(0,101,113,'RECOMMENDED',1), +(0,101,121,'RECOMMENDED',2), (0,103,126,'RECOMMENDED',0), (0,103,112,'RECOMMENDED',1), (0,103,125,'RECOMMENDED',2), @@ -1354,7 +1394,9 @@ INSERT INTO `null_data` VALUES (0,103,113,'RECOMMENDED',10), (0,103,109,'RECOMMENDED',11), (0,103,119,'RECOMMENDED',12), -(0,103,120,'RECOMMENDED',13); +(0,103,120,'RECOMMENDED',13), +(0,103,127,'RECOMMENDED',14), +(0,103,128,'RECOMMENDED',15); /*!40000 ALTER TABLE `null_data` ENABLE KEYS */; UNLOCK TABLES; @@ -1520,7 +1562,7 @@ CREATE TABLE `stats` ( LOCK TABLES `stats` WRITE; /*!40000 ALTER TABLE `stats` DISABLE KEYS */; INSERT INTO `stats` VALUES -('RootBenchmark','¬í\0sr\0-org.caosdb.server.database.misc.RootBenchmarkþ¼ƒQk]\0\0xr\04org.caosdb.server.database.misc.TransactionBenchmarkþ¼ƒQk]\0J\0sinceL\0measurementst\0Ljava/util/Map;[\0stackTraceElementst\0[Ljava/lang/StackTraceElement;L\0\rsubBenchmarksq\0~\0xp\0\0•$\'³^sr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0 thresholdxp?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xur\0[Ljava.lang.StackTraceElement;F*<<ý\"9\0\0xp\0\0\0sr\0java.lang.StackTraceElementa Åš&6Ý…\0B\0formatI\0\nlineNumberL\0classLoaderNamet\0Ljava/lang/String;L\0declaringClassq\0~\0\nL\0fileNameq\0~\0\nL\0\nmethodNameq\0~\0\nL\0\nmoduleNameq\0~\0\nL\0\rmoduleVersionq\0~\0\nxp\0\0Spt\0java.lang.Threadt\0Thread.javat\0\rgetStackTracet\0 java.baset\017.0.14sq\0~\0 \0\0!t\0appt\04org.caosdb.server.database.misc.TransactionBenchmarkt\0TransactionBenchmark.javat\0<init>ppsq\0~\0 \0\0\0ƒq\0~\0t\0-org.caosdb.server.database.misc.RootBenchmarkq\0~\0q\0~\0ppsq\0~\0 \0\0q\0~\0q\0~\0q\0~\0t\0<clinit>ppsq\0~\0 \0\0fq\0~\0t\0org.caosdb.server.CaosDBServert\0CaosDBServer.javat\0initBackendppsq\0~\0 \0\0\0 q\0~\0q\0~\0q\0~\0t\0mainppsq\0~\0?@\0\0\0\0\0w\0\0\0\0\0\0t\0Infosr\0,org.caosdb.server.database.misc.SubBenchmarkþ¼ƒQk]\0L\0nameq\0~\0\nxq\0~\0\0\0•$\'³bsq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xuq\0~\0\0\0\0\nsq\0~\0 \0\0Spq\0~\0q\0~\0\rq\0~\0q\0~\0q\0~\0sq\0~\0 \0\0!q\0~\0q\0~\0q\0~\0q\0~\0ppsq\0~\0 \0\0\0×q\0~\0t\0,org.caosdb.server.database.misc.SubBenchmarkq\0~\0q\0~\0ppsq\0~\0 \0\0šq\0~\0q\0~\0q\0~\0t\0getBenchmarkppsq\0~\0 \0\0£q\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0\0$q\0~\0t\02org.caosdb.server.transaction.TransactionInterfacet\0TransactionInterface.javat\0getTransactionBenchmarkppsq\0~\0 \0\0\00q\0~\0q\0~\0.q\0~\0/t\0executeppsq\0~\0 \0\0\0õq\0~\0t\0org.caosdb.server.utils.Infot\0 Info.javat\0syncDatabaseppsq\0~\0 \0\0\0–q\0~\0t\0/org.caosdb.server.database.misc.RootBenchmark$1q\0~\0t\0runppsq\0~\0 \0\0Hpq\0~\0q\0~\0\rq\0~\09q\0~\0q\0~\0sq\0~\0?@\0\0\0\0\0w\0\0\0\0\0\0t\0 SyncStatssq\0~\0\"\0\0•$\'³bsq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xuq\0~\0\0\0\0 sq\0~\0 \0\0Spq\0~\0q\0~\0\rq\0~\0q\0~\0q\0~\0sq\0~\0 \0\0!q\0~\0q\0~\0q\0~\0q\0~\0ppsq\0~\0 \0\0\0×q\0~\0q\0~\0)q\0~\0q\0~\0ppsq\0~\0 \0\0šq\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0£q\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0\00q\0~\0q\0~\0.q\0~\0/q\0~\02ppsq\0~\0 \0\0\0õq\0~\0q\0~\04q\0~\05q\0~\06ppsq\0~\0 \0\0\0–q\0~\0q\0~\08q\0~\0q\0~\09ppsq\0~\0 \0\0Hpq\0~\0q\0~\0\rq\0~\09q\0~\0q\0~\0sq\0~\0?@\0\0\0\0\0w\0\0\0\0\0\0t\0MySQLSyncStatssq\0~\0\"\0\0•$\'³csq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xuq\0~\0\0\0\0sq\0~\0 \0\0Spq\0~\0q\0~\0\rq\0~\0q\0~\0q\0~\0sq\0~\0 \0\0!q\0~\0q\0~\0q\0~\0q\0~\0ppsq\0~\0 \0\0\0×q\0~\0q\0~\0)q\0~\0q\0~\0ppsq\0~\0 \0\0šq\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0£q\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0q\0~\0t\0-org.caosdb.server.database.BackendTransactiont\0BackendTransaction.javat\0getImplementationppsq\0~\0 \0\0\0+q\0~\0t\08org.caosdb.server.database.backend.transaction.SyncStatst\0SyncStats.javaq\0~\02ppsq\0~\0 \0\0\0žq\0~\0q\0~\0Tq\0~\0Ut\0executeTransactionppsq\0~\0 \0\0\01q\0~\0q\0~\0.q\0~\0/q\0~\02ppsq\0~\0 \0\0\0õq\0~\0q\0~\04q\0~\05q\0~\06ppsq\0~\0 \0\0\0–q\0~\0q\0~\08q\0~\0q\0~\09ppsq\0~\0 \0\0Hpq\0~\0q\0~\0\rq\0~\09q\0~\0q\0~\0sq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xq\0~\0Jxq\0~\0<xq\0~\0!x'); +('RootBenchmark','¬í\0sr\0-org.caosdb.server.database.misc.RootBenchmarkþ¼ƒQk]\0\0xr\04org.caosdb.server.database.misc.TransactionBenchmarkþ¼ƒQk]\0J\0sinceL\0measurementst\0Ljava/util/Map;[\0stackTraceElementst\0[Ljava/lang/StackTraceElement;L\0\rsubBenchmarksq\0~\0xp\0\0•ž|ïsr\0java.util.HashMapÚÁÃ`Ñ\0F\0\nloadFactorI\0 thresholdxp?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xur\0[Ljava.lang.StackTraceElement;F*<<ý\"9\0\0xp\0\0\0sr\0java.lang.StackTraceElementa Åš&6Ý…\0B\0formatI\0\nlineNumberL\0classLoaderNamet\0Ljava/lang/String;L\0declaringClassq\0~\0\nL\0fileNameq\0~\0\nL\0\nmethodNameq\0~\0\nL\0\nmoduleNameq\0~\0\nL\0\rmoduleVersionq\0~\0\nxp\0\0Spt\0java.lang.Threadt\0Thread.javat\0\rgetStackTracet\0 java.baset\017.0.14sq\0~\0 \0\0!t\0appt\04org.caosdb.server.database.misc.TransactionBenchmarkt\0TransactionBenchmark.javat\0<init>ppsq\0~\0 \0\0\0ƒq\0~\0t\0-org.caosdb.server.database.misc.RootBenchmarkq\0~\0q\0~\0ppsq\0~\0 \0\0q\0~\0q\0~\0q\0~\0t\0<clinit>ppsq\0~\0 \0\0fq\0~\0t\0org.caosdb.server.CaosDBServert\0CaosDBServer.javat\0initBackendppsq\0~\0 \0\0\0 q\0~\0q\0~\0q\0~\0t\0mainppsq\0~\0?@\0\0\0\0\0w\0\0\0\0\0\0t\0Infosr\0,org.caosdb.server.database.misc.SubBenchmarkþ¼ƒQk]\0L\0nameq\0~\0\nxq\0~\0\0\0•ž|ósq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xuq\0~\0\0\0\0\nsq\0~\0 \0\0Spq\0~\0q\0~\0\rq\0~\0q\0~\0q\0~\0sq\0~\0 \0\0!q\0~\0q\0~\0q\0~\0q\0~\0ppsq\0~\0 \0\0\0×q\0~\0t\0,org.caosdb.server.database.misc.SubBenchmarkq\0~\0q\0~\0ppsq\0~\0 \0\0šq\0~\0q\0~\0q\0~\0t\0getBenchmarkppsq\0~\0 \0\0£q\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0\0$q\0~\0t\02org.caosdb.server.transaction.TransactionInterfacet\0TransactionInterface.javat\0getTransactionBenchmarkppsq\0~\0 \0\0\00q\0~\0q\0~\0.q\0~\0/t\0executeppsq\0~\0 \0\0\0õq\0~\0t\0org.caosdb.server.utils.Infot\0 Info.javat\0syncDatabaseppsq\0~\0 \0\0\0–q\0~\0t\0/org.caosdb.server.database.misc.RootBenchmark$1q\0~\0t\0runppsq\0~\0 \0\0Hpq\0~\0q\0~\0\rq\0~\09q\0~\0q\0~\0sq\0~\0?@\0\0\0\0\0w\0\0\0\0\0\0t\0 SyncStatssq\0~\0\"\0\0•ž|ósq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xuq\0~\0\0\0\0 sq\0~\0 \0\0Spq\0~\0q\0~\0\rq\0~\0q\0~\0q\0~\0sq\0~\0 \0\0!q\0~\0q\0~\0q\0~\0q\0~\0ppsq\0~\0 \0\0\0×q\0~\0q\0~\0)q\0~\0q\0~\0ppsq\0~\0 \0\0šq\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0£q\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0\00q\0~\0q\0~\0.q\0~\0/q\0~\02ppsq\0~\0 \0\0\0õq\0~\0q\0~\04q\0~\05q\0~\06ppsq\0~\0 \0\0\0–q\0~\0q\0~\08q\0~\0q\0~\09ppsq\0~\0 \0\0Hpq\0~\0q\0~\0\rq\0~\09q\0~\0q\0~\0sq\0~\0?@\0\0\0\0\0w\0\0\0\0\0\0t\0MySQLSyncStatssq\0~\0\"\0\0•ž|ósq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xuq\0~\0\0\0\0sq\0~\0 \0\0Spq\0~\0q\0~\0\rq\0~\0q\0~\0q\0~\0sq\0~\0 \0\0!q\0~\0q\0~\0q\0~\0q\0~\0ppsq\0~\0 \0\0\0×q\0~\0q\0~\0)q\0~\0q\0~\0ppsq\0~\0 \0\0šq\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0£q\0~\0q\0~\0q\0~\0q\0~\0+ppsq\0~\0 \0\0q\0~\0t\0-org.caosdb.server.database.BackendTransactiont\0BackendTransaction.javat\0getImplementationppsq\0~\0 \0\0\0+q\0~\0t\08org.caosdb.server.database.backend.transaction.SyncStatst\0SyncStats.javaq\0~\02ppsq\0~\0 \0\0\0žq\0~\0q\0~\0Tq\0~\0Ut\0executeTransactionppsq\0~\0 \0\0\01q\0~\0q\0~\0.q\0~\0/q\0~\02ppsq\0~\0 \0\0\0õq\0~\0q\0~\04q\0~\05q\0~\06ppsq\0~\0 \0\0\0–q\0~\0q\0~\08q\0~\0q\0~\09ppsq\0~\0 \0\0Hpq\0~\0q\0~\0\rq\0~\09q\0~\0q\0~\0sq\0~\0?@\0\0\0\0\0\0w\0\0\0\0\0\0\0xq\0~\0Jxq\0~\0<xq\0~\0!x'); /*!40000 ALTER TABLE `stats` ENABLE KEYS */; UNLOCK TABLES; @@ -1614,7 +1656,11 @@ INSERT INTO `transaction_log` VALUES ('Update','102','admin',1740068456,947000000,'PAM'), ('Update','103','admin',1740068456,947000000,'PAM'), ('Update','104','admin',1740068456,947000000,'PAM'), -('Update','123','admin',1740068500,514000000,'PAM'); +('Update','123','admin',1740068500,514000000,'PAM'), +('Insert','127','admin',1741871333,860000000,'PAM'), +('Insert','128','admin',1741871333,860000000,'PAM'), +('Update','102','admin',1741871334,501000000,'PAM'), +('Update','104','admin',1741871334,501000000,'PAM'); /*!40000 ALTER TABLE `transaction_log` ENABLE KEYS */; UNLOCK TABLES; @@ -1648,6 +1694,8 @@ INSERT INTO `transactions` VALUES ('a5b91491-1c8c-44b5-b223-8c8fd44dc1c3','admin','PAM',1740068500,514000000), ('abbefec0-f108-4026-a473-5587c5e8eb63','admin','PAM',1729771724,356000000), ('b0e78639-d3e9-454d-aaac-856f5299d47d','admin','PAM',1729771780,301000000), +('b3b61ade-11cc-4eb7-8bf4-400233e7ff5b','admin','PAM',1741871333,860000000), +('c79390d1-787c-4640-8f5d-18127e99290f','admin','PAM',1741871334,501000000), ('cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e','administration','CaosDB',0,0), ('d3dd1cca-cf29-42a5-aec1-0c162df9fc5e','admin','PAM',1729771765,62000000), ('f01fac04-1f04-4cec-955b-4aa091c29f5c','admin','PAM',1729771792,223000000); @@ -6115,4 +6163,4 @@ DELIMITER ; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-02-20 16:22:02 +-- Dump completed on 2025-03-13 13:08:33