Weimin Ma

136 papers A 1B 3C 10Misc 5Journal 102Unranked 15
YearRankTypeTitle / Venue / Authors
2026 J jnl
Biomed. Signal Process. Control.
Jiahui Shi, Bo Chen, Jiacheng Liu, Weigang Lu, Shugang Zhang, Weimin Ma, Fei Yang, Dong Li
2026 J jnl
Biomed. Signal Process. Control.
Qing Lu, Longbo Zheng, Jionglong Su, Weimin Ma, Hui Ma, Yulin Zhang
2026 J jnl
Algorithms
Xuan Su, Jitai Han, Tongtong Gu, Junjie Yu, Weimin Ma
2025 J jnl
Expert Syst. Appl.
Weimin Ma, Zhuang Ma, Yan Tu
2025 J jnl
Comput. Ind. Eng.
Kaixin Gong, Weimin Ma, Wenjing Lei, Hui Zhang, Mark Goh
2025 J jnl
Inf. Fusion
Kaixin Gong, Weimin Ma, Mark Goh
2025 J jnl
CoRR
Jingkai Xu, De Cheng, Xiangqian Zhao, Jungang Yang, Zilong Wang, Xinyang Jiang, Xufang Luo, Lili Chen, Xiaoli Ning, Chengxu Li, Xinzhu Zhou, Xuejiao Song, Ang Li, Qingyue Xia, Zhou Zhuang, Hongfei Ouyang, Ke Xue, Yujun Sheng, Rusong Meng, Feng Xu, Xi Yang, Weimin Ma, Yusheng Lee, Dongsheng Li, Xinbo Gao, Jianming Liang, Lili Qiu, Nannan Wang, Xianbo Zuo, Cui Yong
2024 J jnl
J. Oper. Res. Soc.
Kaixin Gong, Weimin Ma, Wenjing Lei, Mark Goh
2024 J jnl
Appl. Soft Comput.
Kaixin Gong, Weimin Ma, Wenjing Lei, Mark Goh, Zitong Ren
2024 J jnl
J. Robotics
Yupei Yan, Weimin Ma, Sengfat Wong, Xuemei Yin, Qiang Pan, Zhiwen Liao, Xiaoxin Lin
2024 J jnl
Expert Syst. Appl.
Wenjing Lei, Weimin Ma, Xiaona Li, Bingzhen Sun
2023 J jnl
Comput. Ind. Eng.
Xiaona Li, Weimin Ma, Honghua Shi, Zhengrong Cheng, Wenjing Lei
2023 J jnl
Artif. Intell. Rev.
Bingzhen Sun, Sirong Tong, Weimin Ma, Chao Jiang
2023 J jnl
Symmetry
Fu Zhang, Weimin Ma, Hongwei Ma
2023 J jnl
J. Oper. Res. Soc.
Weimin Ma, Kaixin Gong, Zhang-peng Tian
2023 J jnl
Kybernetes
Weimin Ma, Xiaona Li
2023 J jnl
J. Intell. Fuzzy Syst.
Kaixin Gong, Weimin Ma, Zitong Ren, Jia Wang
2023 conf
RICAI
Weimin Ma, Yian Su, Yong Lin
2022 J jnl
Artif. Intell. Rev.
Bingzhen Sun, Sirong Tong, Weimin Ma, Ting Wang, Chao Jiang
2021 C conf
CSCWD
Fuqing Zhao, Ru Ma, Jianxin Tang, Yi Zhang, Weimin Ma
2021 J jnl
Connect. Sci.
Fuqing Zhao, Songlin Du, Hao Lu, Weimin Ma, Houbin Song
2021 C conf
CSCWD
Fuqing Zhao, Songlin Du, Jianxin Tang, Yi Zhang, Weimin Ma
2021 C conf
CSCWD
Fuqing Zhao, Jinlong Zhao, Xiaotong Hu, Yi Zhang, Weimin Ma
2020 J jnl
Expert Syst. Appl.
Fuqing Zhao, Lixin Zhang, Yi Zhang, Weimin Ma, Chuck Zhang, Houbin Song
2020 J jnl
Appl. Intell.
Fuqing Zhao, Xuan He, Yi Zhang, Wenchang Lei, Weimin Ma, Chuck Zhang, Houbin Song
2020 J jnl
Connect. Sci.
Fuqing Zhao, Lixin Zhang, Yi Zhang, Weimin Ma, Chuck Zhang, Houbin Song
2020 J jnl
IEEE Access
Weimin Ma, Ranran Zhang, Zhengrong Cheng
2020 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Shaoping Zhu, Yongliang Xiao, Weimin Ma
2020 J jnl
Serv. Oriented Comput. Appl.
Fuqing Zhao, Songlin Du, Yi Zhang, Weimin Ma, Houbin Song
2020 J jnl
Inf. Sci.
Wenjing Lei, Weimin Ma, Bingzhen Sun
2020 J jnl
Genom. Proteom. Bioinform.
Jinwei Suo, Heng Zhang, Qi Zhao, Nan Zhang, Yongxue Zhang, Ying Li, Baohua Song, Juanjuan Yu, Jianguo Cao, Tai Wang, Ji Luo, Lihai Guo, Jun Ma, Xumin Zhang, Yimin She, Lianwei Peng, Weimin Ma, Siyi Guo, Shaojun Dai
2020 J jnl
Electron. Commer. Res. Appl.
Weimin Ma, Chenrui Zhao, Hua Ke, Zhiyi Chen
2020 J jnl
RAIRO Oper. Res.
Rong Cheng, Weimin Ma, Hua Ke
2020 J jnl
Inf. Sci.
Bingzhen Sun, Xiangtang Chen, Liye Zhang, Weimin Ma
2020 J jnl
J. Intell. Fuzzy Syst.
Weimin Ma, Wenjing Lei, Bingzhen Sun
2020 J jnl
Kybernetes
Weimin Ma, Wenjing Lei, Bingzhen Sun
2020 J jnl
Comput. Ind. Eng.
Bingzhen Sun, Chang Qi, Weimin Ma, Ting Wang, Liye Zhang, Chao Jiang
2019 J jnl
IEEE Access
Fuqing Zhao, Feilong Xue, Guoqiang Yang, Weimin Ma, Chuck Zhang, Houbin Song
2019 C conf
CSCWD
Fuqing Zhao, Xuan He, Yi Zhang, Weimin Ma, Chuck Zhang
2019 J jnl
J. Ambient Intell. Humaniz. Comput.
Liyao Wu, Weimin Ma, Yan Yang, Ke Wang
2019 J jnl
Appl. Intell.
Fuqing Zhao, Feilong Xue, Yi Zhang, Weimin Ma, Chuck Zhang, Houbin Song
2019 J jnl
Expert Syst. Appl.
Fuqing Zhao, Shuo Qin, Guoqiang Yang, Weimin Ma, Chuck Zhang, Houbin Song
2019 J jnl
Expert Syst. Appl.
Fuqing Zhao, Shuo Qin, Yi Zhang, Weimin Ma, Chuck Zhang, Houbin Song
2019 J jnl
Soft Comput.
Weimin Ma, Yang Liu, Xingfang Zhang
2019 J jnl
Expert Syst. Appl.
Fuqing Zhao, Shuo Qin, Yi Zhang, Weimin Ma, Chuck Zhang, Houbin Song
2019 J jnl
Soft Comput.
Bingzhen Sun, Weimin Ma, Xiangtang Chen, Xiong Zhang
2019 J jnl
Int. J. Mach. Learn. Cybern.
Weimin Ma, Rong Cheng, Hua Ke, Zhang Zhao
2019 J jnl
Comput. Ind. Eng.
Bingzhen Sun, Weimin Ma, Xiangtang Chen
2018 J jnl
IEEE Access
Fuqing Zhao, Shuo Qin, Guoqiang Yang, Weimin Ma, Chuck Zhang, Houbin Song
2018 C conf
CSCWD
Fuqing Zhao, Liu Huan, Yi Zhang, Weimin Ma, Chuck Zhang
2018 J jnl
Expert Syst. Appl.
Fuqing Zhao, Huan Liu, Yi Zhang, Weimin Ma, Chuck Zhang
2018 J jnl
Expert Syst. Appl.
Fuqing Zhao, Feilong Xue, Yi Zhang, Weimin Ma, Chuck Zhang, Houbin Song
2018 C conf
CSCWD
Fuqing Zhao, Xuan He, Weimin Ma, Jianqiu Zhang, Chuck Zhang
2018 J jnl
J. Comb. Optim.
Weimin Ma, Wei Shao, Xiaodong Ji
2018 J jnl
Comput. Ind. Eng.
Bingzhen Sun, Weimin Ma, Xiangtang Chen, Xiaonan Li
2018 J jnl
J. Intell. Fuzzy Syst.
Rong Cheng, Weimin Ma, Hua Ke
2018 J jnl
Asia Pac. J. Oper. Res.
Weimin Ma, Rong Cheng, Hua Ke
2018 J jnl
Comput. Informatics
Weimin Ma, Lei Yue, Bingzhen Sun, Haiyan Zhao
2018 J jnl
J. Intell. Fuzzy Syst.
Weimin Ma, Yang Liu, Xingfang Zhang
2018 J jnl
Int. J. Approx. Reason.
Bingzhen Sun, Weimin Ma, Binjiang Li, Xiaonan Li
2018 J jnl
Soft Comput.
Liying Liu, Bo Zhang, Weimin Ma
2017 J jnl
Eng. Appl. Artif. Intell.
Fuqing Zhao, Yang Liu, Yi Zhang, Weimin Ma, Chuck Zhang
2017 J jnl
Int. J. Mach. Learn. Cybern.
Haiyan Zhao, Weimin Ma, Bingzhen Sun
2017 J jnl
J. Intell. Fuzzy Syst.
Bingzhen Sun, Weimin Ma
2017 J jnl
Int. J. Mach. Learn. Cybern.
Eric C. C. Tsang, Bingzhen Sun, Weimin Ma
2017 J jnl
Appl. Soft Comput.
Bingzhen Sun, Weimin Ma, Xiaonan Li
2017 J jnl
Knowl. Based Syst.
Bingzhen Sun, Weimin Ma, Yuhua Qian
2017 J jnl
J. Ambient Intell. Humaniz. Comput.
Weimin Ma, Liying Liu, Rong Gao, Xinli Zhang, Xingfang Zhang
2017 J jnl
J. Intell. Fuzzy Syst.
Weimin Ma, Liying Liu, Xingfang Zhang
2017 J jnl
Kybernetes
Shujun Zhou, Bingzhen Sun, Weimin Ma, Xiangtang Chen
2017 J jnl
Int. J. Approx. Reason.
Bingzhen Sun, Weimin Ma, Xia Xiao
2017 J jnl
Int. J. Mach. Learn. Cybern.
Xin Zheng, Ke Wang, Weimin Ma
2016 J jnl
Soft Comput.
Bingzhen Sun, Weimin Ma, Haiyan Zhao
2016 J jnl
Kybernetes
Bingzhen Sun, Weimin Ma
2016 J jnl
Asia Pac. J. Oper. Res.
Weimin Ma, Xiaodong Ji
2016 J jnl
Int. J. Mach. Learn. Cybern.
Weimin Ma, Yangyang Che, Hu Huang, Hua Ke
2016 J jnl
Inf. Sci.
Bingzhen Sun, Weimin Ma, Haiyan Zhao
2016 J jnl
Asia Pac. J. Oper. Res.
Bo Xu, Weimin Ma, Hui Huang, Lei Yue
2015 J jnl
Expert Syst. J. Knowl. Eng.
Bingzhen Sun, Weimin Ma, Xiangtang Chen
2015 J jnl
J. Intell. Manuf.
Weimin Ma, Miaomiao Wang, Xiaoxi Zhu
2015 J jnl
J. Intell. Fuzzy Syst.
Bingzhen Sun, Weimin Ma
2015 J jnl
Inf. Sci.
Bingzhen Sun, Weimin Ma
2014 J jnl
Inf. Sci.
Bingzhen Sun, Weimin Ma, Haiyan Zhao
2014 J jnl
Expert Syst. J. Knowl. Eng.
Bingzhen Sun, Weimin Ma, Zengtai Gong
2014 J jnl
Int. J. Mach. Learn. Cybern.
Weimin Ma, Miaomiao Wang, Xiaoxi Zhu
2014 J jnl
J. Sched.
Feifeng Zheng, Yinfeng Xu, Weimin Ma, E. Zhang
2014 J jnl
Inf. Sci.
Bingzhen Sun, Weimin Ma, Degang Chen
2014 J jnl
Artif. Intell. Rev.
Bingzhen Sun, Weimin Ma
2013 J jnl
Eur. J. Oper. Res.
Weimin Ma, Zhang Zhao, Hua Ke
2013 J jnl
Appl. Artif. Intell.
Weimin Ma, Miaomiao Wang
2013 J jnl
Kybernetes
Bingzhen Sun, Weimin Ma
2012 J jnl
Appl. Math. Comput.
Hua Ke, Weimin Ma, Xiaowei Chen
2012 J jnl
J. Softw.
Bing-Bing Qiu, James Nga-Kwok Liu, Weimin Ma
2012 J jnl
Int. J. Gen. Syst.
Weimin Ma, Bingzhen Sun
2012 conf
RSCTC
Bingzhen Sun, Weimin Ma, Haiyan Zhao, Xinxin Wang
2012 J jnl
Int. J. Approx. Reason.
Weimin Ma, Bingzhen Sun
2012 J jnl
Fuzzy Optim. Decis. Mak.
Hua Ke, Weimin Ma, Junjie Ma
2012 Misc conf
ICMLC
Eric C. C. Tsang, Weimin Ma, Bingzhen Sun
2011 J jnl
Soft Comput.
Weimin Ma, Ke Wang, Zhu-Ping Liu
2010 J jnl
Appl. Math. Comput.
Yuelin Gao, Guorong Wu, Weimin Ma
2010 J jnl
J. Convergence Inf. Technol.
Weihua Xu, Weimin Ma, Fukun Yu
2010 J jnl
Int. J. Comput. Intell. Syst.
Xu Xu, Ke Wang, Weimin Ma, Jie Lin
2010 J jnl
Fuzzy Optim. Decis. Mak.
Hua Ke, Weimin Ma, Xin Gao, Weihua Xu
2010 C conf
EJC
Ke Wang, James N. K. Liu, Weimin Ma
2010 J jnl
J. Convergence Inf. Technol.
Weimin Ma, Ke Wang
2010 Misc conf
ICMLC
Weimin Ma, Zhang Zhao
2010 conf
ICDM Workshops
Ke Wang, James N. K. Liu, Weimin Ma
2009 B conf
FUZZ-IEEE
Hua Ke, Weimin Ma
2009 J jnl
Appl. Math. Comput.
Hua Ke, Weimin Ma, Yaodong Ni
2008 conf
ICDM Workshops
Ke Wang, James Nga-Kwok Liu, Weimin Ma
2008 B conf
IEEE Congress on Evolutionary Computation
Zhaohua Wang, Jianhua Yin, Weimin Ma
2008 conf
OTM Workshops
Weimin Ma, Lawrence Chung, Kendra M. L. Cooper
2008 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Weimin Ma, Shao-Hua Tang, Ke Wang
2008 conf
NCM (2)
Ke Wang, James N. K. Liu, Weimin Ma
2007 conf
FSKD (1)
Chunlin Xin, Weimin Ma, Fanglei Yi
2007 C conf
COCOA
Weimin Ma, Ting Gao, Ke Wang
2007 conf
ESCAPE
Weimin Ma, Ke Wang
2007 conf
Software Engineering Research and Practice
Weimin Ma, Lawrence Chung, Kendra M. L. Cooper
2006 conf
ICONIP (3)
Weimin Ma
2006 J jnl
J. Glob. Optim.
Weimin Ma, James N. K. Liu, Guoqing Chen, Jane You
2006 conf
Software Engineering Research and Practice
Weimin Ma, Kendra M. L. Cooper, Lawrence Chung
2006 conf
ICDM Workshops
Ke Wang, James N. K. Liu, Weimin Ma
2006 B conf
ISAAC
Weimin Ma, Ke Wang
2006 conf
ICCBSS
Lawrence Chung, Weimin Ma, Kendra M. L. Cooper
2005 conf
FSKD (1)
Weimin Ma, Guoqing Chen
2005 conf
Software Engineering Research and Practice
Kendra M. L. Cooper, Lawrence Chung, Weimin Ma
2005 C conf
ADMA
Weimin Ma, Guoqing Chen
2005 C conf
SNPD
Weimin Ma, Kendra M. L. Cooper, Lawrence Chung
2004 J jnl
Int. J. Found. Comput. Sci.
Weimin Ma, Yin-Feng Xu, Jane You, James N. K. Liu, Kanliang Wang
2002 Misc conf
COCOON
Weimin Ma, Yin-Feng Xu, Jane You, James N. K. Liu, Kanliang Wang
2002 A conf
IPDPS
Xinfeng Yang, Weimin Ma, Jane You, James N. K. Liu
2002 J jnl
J. Glob. Optim.
Weimin Ma, Jane You, Yin-Feng Xu, James N. K. Liu, Kanliang Wang
2002 Misc conf
CATA
Xinfeng Yang, Weimin Ma, Jane You, James N. K. Liu
2002 Misc conf
CATA
Weimin Ma, Hui Chen, Jane You, James N. K. Liu, Yinfeng Xu
2001 J jnl
J. Glob. Optim.
Weimin Ma, Yin-Feng Xu, Kanliang Wang
1990 J jnl
Microprocessing and Microprogramming
J. J. Narraway, Weimin Ma
redb/extractors/database_exporters.py
← Index redb/extractors/database_exporters.py python
from abc import ABC, abstractmethod
from datetime import datetime, timezone
from dataclasses import asdict
import hashlib
import json
import inspect
from typing import Any, Dict, List, Union
from redb import settings
import traceback
from contextlib import contextmanager

class DatabaseExporter(ABC):
    @abstractmethod
    def export(self, data: Any, **kwargs) -> bool:
        """Export data to the database"""
        pass

class ElasticsearchExporter(DatabaseExporter):
    def __init__(self, logger: Any, index_prefix: str):
        self.client = settings.get_elasticsearch_client()
        self.index_prefix = index_prefix
        self.log = logger

    def export(self, data: Any, **kwargs) -> bool:
        self.log.debug(inspect.currentframe().f_code.co_name)
        if not isinstance(data, list):
            data = [data]
            
        now_t = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
        index = kwargs.get('index')
        tag = kwargs.get('tag')
        hashes = kwargs.get('hashes')
        
        for dataclass_ in data:
            try:
                # Convert dataclass to dict and filter out None values
                document = {k: v for k, v in asdict(dataclass_).items() if v is not None}
                
                if tag:
                    document["tag"] = tag
                document |= hashes
                document["timestamp_utc"] = now_t
                document["known_benign"] = kwargs.get('known_benign', False)
                document["known_malicious"] = kwargs.get('known_malicious', False)

                if "_id" in document:
                    tmp_id = document.pop("_id") + document["sha256"]
                    _id = hashlib.sha256(tmp_id.encode()).hexdigest()
                else:
                    _id = document["sha256"]

                doc_dump = json.dumps(document)
                self.client.index(index=index, id=_id, document=doc_dump)
                
            except Exception as e:
                self.log.error(f"Failed to export to Elasticsearch: {e}")
                return False
                
        return True

class PrintExporter(DatabaseExporter):
    """Exporter that prints results instead of uploading to database (for dry-run mode)"""
    def __init__(self, logger: Any, index_prefix: str):
        self.index_prefix = index_prefix
        self.log = logger
        self.log.debug(f"PrintExporter initialized with index_prefix: {index_prefix}")

    def export(self, data: Any, **kwargs) -> bool:
        try:
            import json
            from dataclasses import asdict, is_dataclass

            self.log.debug(f"PrintExporter.export called with data type: {type(data)}")

            if data is None:
                self.log.debug("PrintExporter.export: data is None, returning True")
                return True

            if not isinstance(data, list):
                data = [data]

            for i, item in enumerate(data):
                if is_dataclass(item) and not isinstance(item, type):
                    # Convert dataclass instance to dict
                    try:
                        item_dict = asdict(item)
                        print(json.dumps(item_dict, indent=2, default=str))
                    except Exception as e:
                        self.log.error(f"PrintExporter.export: Error converting dataclass: {e}")
                        print(str(item))
                elif isinstance(item, dict):
                    # Already a dict, print as JSON
                    print(json.dumps(item, indent=2, default=str))
                else:
                    # Fallback for other types
                    print(json.dumps(item, indent=2, default=str) if not isinstance(item, str) else item)

            self.log.debug("PrintExporter.export: completed successfully")
            return True
        except Exception as e:
            self.log.error(f"PrintExporter.export: Failed to print data: {e}")
            return False


class ClickHouseExporter(DatabaseExporter):
    def __init__(self, logger: Any, index_prefix: str, client=None):
        self.index_prefix = index_prefix
        self.log = logger
        self.client = client

    @contextmanager
    def clickhouse_connection(self):
        client = settings.create_clickhouse_client()
        try:
            yield client
        finally:
            try:
                client.close()
            except:
                pass
    # def export(self, data: Any, **kwargs) -> bool:
    #     try:
    #         # Handle multi-table export case
    #         # if isinstance(data, dict) and 'multi_table' in data:
    #         #     for table_name, table_data in data.items():
    #         #         if table_name != 'multi_table' and isinstance(table_data, dict) and 'table' in table_data:
    #         #             self.log.debug(f"Exporting to table: {table_data['table']}")
    #         #             self.log.debug(f"Column names: {table_data['column_names']}")
    #         #             self.log.debug(f"Column types: {table_data['column_type_names']}")
    #         #             self.log.debug(f"Data sample: {table_data['data'][0] if table_data['data'] else 'No data'}")
                        
    #         #             try:
    #         #                 result = self.client.insert(
    #         #                     table_data['table'],
    #         #                     table_data['data'],
    #         #                     column_names=table_data['column_names'],
    #         #                     column_type_names=table_data['column_type_names']
    #         #                 )
    #         #                 if not result:
    #         #                     self.log.error(f"Failed to insert into table {table_data['table']}")
    #         #                     return False
    #         #             except Exception as e:
    #         #                 self.log.error(f"Error inserting into table {table_data['table']}: {e}")
    #         #                 self.log.error(f"Data that caused error: {table_data['data']}")
    #         #                 return False
    #         #     return True

    #         if isinstance(data, dict) and 'multi_table' in data:
    #             for table_name, table_data in data.items():
    #                 if table_name != 'multi_table' and isinstance(table_data, dict) and 'table' in table_data:
    #                     self.log.debug(f"Exporting to table: {table_data['table']}")
                        
    #                     # Validate each row before insert
    #                     for row in table_data['data']:
    #                         for val, col_name, col_type in zip(row, table_data['column_names'], 
    #                                                         table_data['column_type_names']):
    #                             # Check for empty strings
    #                             if isinstance(val, str) and not val:
    #                                 self.log.error(f"Empty string found for column {col_name}")
    #                                 raise ValueError(f"Empty string not allowed for column {col_name}")
                                
    #                             # Log all string values for certificate_serial_number
    #                             if col_name == 'certificate_serial_number':
    #                                 self.log.debug(f"Serial number value: '{val}', type: {type(val)}, "
    #                                             f"repr: {repr(val)}")
                        
    #                     try:
    #                         result = self.client.insert(
    #                             table_data['table'],
    #                             table_data['data'],
    #                             column_names=table_data['column_names'],
    #                             column_type_names=table_data['column_type_names']
    #                         )
    #                         if not result:
    #                             self.log.error(f"Failed to insert into table {table_data['table']}")
    #                             return False
    #                     except Exception as e:
    #                         self.log.error(f"Error inserting into table {table_data['table']}: {e}")
    #                         self.log.error(f"Data that caused error: {table_data['data']}")
    #                         return False
    #             return True

    #         # Handle single table case
    #         table = kwargs.get('table')
    #         if not table:
    #             raise ValueError("Table name must be provided for ClickHouse export")
            
    #         # Unpack the tuple returned by prepare_export_data
    #         if isinstance(data, tuple):
    #             if len(data) != 3:
    #                 raise ValueError("Data tuple must contain exactly 3 elements: (data, column_names, column_type_names)")
    #             insert_data, column_names, column_type_names = data
    #         else:
    #             # Use provided column names and types from kwargs
    #             insert_data = data
    #             column_names = kwargs.get('column_names')
    #             column_type_names = kwargs.get('column_type_names')
                
    #         if not (column_names and column_type_names):
    #             raise ValueError("column_names and column_type_names must be provided")

    #         # Ensure data is in list format for batch insert
    #         if not isinstance(insert_data, list):
    #             insert_data = [insert_data]
                
    #         self.client.insert(
    #             table,
    #             insert_data,
    #             column_names=column_names,
    #             column_type_names=column_type_names
    #         )
    #         return True
            
    #     except Exception as e:
    #         self.log.error(f"Failed to export to ClickHouse: {e}")
    #         return False

    def get_client(self):
        """Get existing client or create new one if needed"""
        if self.client:
            return self.client
        try:
            return settings.create_clickhouse_client() 
        except Exception as e:
            self.log.error(f"Failed to create ClickHouse client: {e}")
            return None
            
    # WORKING SIMPLE VERSION
    def export(self, data: Any, **kwargs) -> bool:
        try:
            # # Handle multi-table export case
            # # if isinstance(data, dict) and 'multi_table' in data:
            # #     for table_data in data.values():
            # #         if isinstance(table_data, dict) and 'table' in table_data:
            # #             result = self.client.insert(
            # #                 table_data['table'],
            # #                 table_data['data'],
            # #                 column_names=table_data['column_names'],
            # #                 column_type_names=table_data['column_type_names']
            # #             )
            # #             if not result:  # If any insert fails, return False
            # #                 return False
            # #     return True
            # if isinstance(data, dict) and 'multi_table' in data:
            #     for key, table_data in data.items():
            #         if key != 'multi_table' and isinstance(table_data, dict) and 'table' in table_data:
            #             # Add type hints
            #             typed_data = []
            #             for row in table_data['data']:
            #                 typed_row = []
            #                 for val, type_name in zip(row, table_data['column_type_names']):
            #                     if isinstance(val, str) and not val:
            #                         val = 'UNKNOWN'
            #                     if type_name == 'String' or 'LowCardinality(String)' in type_name:
            #                         val = str(val) if val is not None else 'UNKNOWN'
            #                     typed_row.append(val)
            #                 typed_data.append(typed_row)
                        
            #             table_data['data'] = typed_data
                        
            #             result = self.client.insert(
            #                 table_data['table'],
            #                 table_data['data'],
            #                 column_names=table_data['column_names'],
            #                 column_type_names=table_data['column_type_names'],
            #                 settings={'input_format_values_interpret_expressions': 0}  # Disable type inference
            #             )
            #             if not result:
            #                 return False
            #         return True

            # Get a new client connection for this export operation
            with self.clickhouse_connection() as client:
                if not client:
                    return False

                # LAST WORKING VERSION
                if isinstance(data, dict) and 'multi_table' in data:
                    for key, table_data in data.items():
                        if key != 'multi_table' and isinstance(table_data, dict) and 'table' in table_data:
                            # Debug logging
                            self.log.debug(f"Processing table: {table_data['table']}")
                            self.log.debug(f"Column names: {table_data['column_names']}")
                            self.log.debug(f"Column types: {table_data['column_type_names']}")
                            
                            typed_data = []
                            for row_idx, row in enumerate(table_data['data']):
                                typed_row = []
                                for val_idx, (val, type_name, col_name) in enumerate(
                                    zip(row, table_data['column_type_names'], table_data['column_names'])
                                ):
                                    try:
                                        # Handle different types
                                        if val is None:
                                            if 'Nullable' in type_name:
                                                val = None  # Keep None for Nullable columns
                                            elif 'Array' in type_name:
                                                val = []
                                            elif 'Int' in type_name or 'UInt' in type_name:
                                                val = 0
                                            elif 'FixedString(16)' in type_name:
                                                val = b'\x00' * 16  # Binary FixedString
                                            elif 'String' in type_name or 'LowCardinality' in type_name:
                                                val = 'UNKNOWN'
                                            elif 'DateTime' in type_name:
                                                val = datetime.now(timezone.utc)
                                            elif 'Boolean' in type_name:
                                                val = False
                                            else:
                                                self.log.error(f"Unhandled type {type_name} for null value")
                                                val = 'UNKNOWN'
                                        
                                        # Log problematic values
                                        if isinstance(val, str) and not val.strip():
                                            self.log.warning(f"Empty string found in table {table_data['table']}, "
                                                        f"column {col_name}, row {row_idx}")
                                        
                                        # Ensure array types are always lists
                                        if 'Array' in type_name and not isinstance(val, list):
                                            val = [val]
                                        
                                        typed_row.append(val)
                                    except Exception as e:
                                        self.log.error(f"Error processing value in table {table_data['table']}, "
                                                    f"column {col_name} ({type_name}), "
                                                    f"row {row_idx}, value: {repr(val)}")
                                        raise
                                        
                                typed_data.append(typed_row)
                            
                            table_data['data'] = typed_data

                            # Skip insert if there is nothing to insert
                            if not typed_data:
                                self.log.debug(f"No data to insert for table {table_data['table']}, skipping.")
                                continue

                            # Debug log the first row of data
                            self.log.debug(f"Sample row for {table_data['table']}: {typed_data[0]}")

                            result = client.insert(
                                table_data['table'],
                                table_data['data'],
                                column_names=table_data['column_names'],
                                column_type_names=table_data['column_type_names'],
                                settings={'input_format_values_interpret_expressions': 0}
                            )
                            if not result:
                                self.log.error(f"Insert failed for table {table_data['table']}")
                                return False
                    return True

                # Handle single table case
                table = kwargs.get('table')
                if not table:
                    raise ValueError("Table name must be provided for ClickHouse export")
                
                # Unpack the tuple returned by prepare_export_data
                if isinstance(data, tuple):
                    if len(data) != 3:
                        raise ValueError("Data tuple must contain exactly 3 elements: (data, column_names, column_type_names)")
                    insert_data, column_names, column_type_names = data
                else:
                    # Use provided column names and types from kwargs
                    insert_data = data
                    column_names = kwargs.get('column_names')
                    column_type_names = kwargs.get('column_type_names')
                    
                if not (column_names and column_type_names):
                    raise ValueError("column_names and column_type_names must be provided")

                # Ensure data is in list format for batch insert
                if not isinstance(insert_data, list):
                    insert_data = [insert_data]

                # Skip insert if there is nothing to insert
                if not insert_data:
                    self.log.debug(f"No data to insert for table {table}, skipping.")
                    return True

                client.insert(
                    table,
                    insert_data,
                    column_names=column_names,
                    column_type_names=column_type_names,
                    settings={'input_format_values_interpret_expressions': 0}  # Disable type inference
                )
                return True

        except TypeError as e:
            # Get the actual value causing the error from the exception traceback
            import sys
            exc_type, exc_value, exc_traceback = sys.exc_info()
            
            # Walk through the traceback to find the frame with the problematic value
            current = exc_traceback
            while current:
                if 'string.py' in current.tb_frame.f_code.co_filename and '_data_size' in current.tb_frame.f_code.co_name:
                    locals_dict = current.tb_frame.f_locals
                    problematic_value = locals_dict.get('x')
                    self.log.error(f"TypeError with value: {problematic_value} (type: {type(problematic_value)})")
                    self.log.error(f"Full locals at error: {locals_dict}")
                    break
                current = current.tb_next
            
            self.log.error(f"Failed to export to ClickHouse: {e}")
            self.log.error("Full traceback:")
            self.log.error(traceback.format_exc())
            return False
        except Exception as e:
            self.log.error(f"Failed to export to ClickHouse: {e}")
            self.log.error(traceback.format_exc())
            return False
        finally:
            # Only close if we created a new client
            if client and client != self.client:
                # Close the client connection
                try:
                    client.close()
                except:
                    pass