From b4112adde74200f5dbccd6bcc48f07aa9dc393d2 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 23 Oct 2025 12:15:41 +0800 Subject: [PATCH] bugfix --- setup.cfg | 5 +++++ sqlor/dbloader.py | 7 +++++++ sqlor/dbpassword.py | 17 +++++++++++++++++ sqlor/dbpools.py | 15 +++++++++++++-- sqlor/oracleor.py | 3 +++ sqlor/sor.py | 3 +++ 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 sqlor/dbloader.py create mode 100644 sqlor/dbpassword.py diff --git a/setup.cfg b/setup.cfg index 66e2e7c..fa89cf9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -20,3 +20,8 @@ install_requires = asyncio jinja2 +[options.entry_points] +console_scripts = + dbpassword = sqlor.dbpassword:main + dbloader = sqlor.dbloader:main + diff --git a/sqlor/dbloader.py b/sqlor/dbloader.py new file mode 100644 index 0000000..82927de --- /dev/null +++ b/sqlor/dbloader.py @@ -0,0 +1,7 @@ +from appPublic.worker import get_event_loop + +async def main(): + print('to be programming') + +if __name__ == '__main__': + get_event_loop().run_until_complete(main()) diff --git a/sqlor/dbpassword.py b/sqlor/dbpassword.py new file mode 100644 index 0000000..6556f79 --- /dev/null +++ b/sqlor/dbpassword.py @@ -0,0 +1,17 @@ +import os, sys +from appPublic.aes import aes_encode_b64 +from appPublic.jsonConfig import getConfig + +def main(): + if len(sys.argv) < 3: + print(f'{sys.argv[0]} server_path dbuser_password') + sys.exit(1) + runpath = sys.argv[1] + password = sys.argv[2] + config = getConfig(runpath) + cyber = aes_encode_b64(config.password_key, sys.argv[2]) + print(f'{password} encoded is {cyber}') + sys.exit(0) + +if __name__ == '__main__': + main() diff --git a/sqlor/dbpools.py b/sqlor/dbpools.py index fb42bc1..af532bd 100755 --- a/sqlor/dbpools.py +++ b/sqlor/dbpools.py @@ -56,13 +56,24 @@ class SqlorPool: self.sqlors.append(x) return x + async def test_sqlor(self, sor): + try: + await sor.execute(sor.test_sqlstr, {}) + return True + except: + return False + @asynccontextmanager async def context(self): async with self.sema: + sqlors = [s for s in self.sqlors] yielded_sqlor = None - for s in self.sqlors: + for s in sqlors: if not s.used: - yielded_sqlor = s + if self.test_sqlor(s): + yielded_sqlor = s + else: + self.sqlors = [ x for x in self.sqlors if x != s ] if not yielded_sqlor: yielded_sqlor = await self._new_sqlor() yielded_sqlor.used = True diff --git a/sqlor/oracleor.py b/sqlor/oracleor.py index d34b0c4..9a2ebaf 100755 --- a/sqlor/oracleor.py +++ b/sqlor/oracleor.py @@ -66,6 +66,9 @@ from ( ) where row_id >=$[from_line]$ and row_id < $[end_line]$""" + def test_sqlstr(self): + return "select 1 from dual" + def tablesSQL(self): sqlcmd = """select lower(table_name) as name, diff --git a/sqlor/sor.py b/sqlor/sor.py index cdd5011..790b482 100755 --- a/sqlor/sor.py +++ b/sqlor/sor.py @@ -95,6 +95,9 @@ class SQLor(object): key=getConfig().password_key self.dbdesc.password = aes_decode_b64(key, self.dbdesc.password) + def test_sqlstr(self): + return "select 1" + async def get_schema(self): def concat_idx_info(idxs): x = []