<commit_before><?php
namespace Home\Service;

/**
 * ModelService
 */
class ModelService extends CommonService {
    /**
     * 得到数据模型的详细信息
     * @param  array $where   查询条件
     * @param  string $fields 插叙字段
     * @return array
     */
    public function getPagination($where, $fields,$order,$firstRow,$listRows) {
        $models = parent::getPagination($where, 
                                        $fields,
                                        $order,
                                        $firstRow,
                                        $listRows);
        foreach ($models as $key => $model) {
            // 模型拥有的字段数目
            $models[$key]['fields_count'] = count($model['fields']);
            // 记录行数
            $rows = D('Common')->getTableRows($model['tbl_name']);
            $models[$key]['rows'] = $rows;
        }

        return $models;
    }

    /**
     * 得到所有的模型
     * @param  string $fields 查询字段
     * @param  string  $order 排序
     * @return array
     */
    public function getAll($fields, $order) {
        return $this->getPagination(null, $fields, $order, null, null);
    }

    /**
     * 按id得到model数据
     * @param  int     $id
     * @return array
     */
    public function getById($id) {
        $model = $this->getD()->relation(true)->getById($id);
        if (empty($model)) {
            return null;
        }

        $model['fields_count'] = count($model['fields']);
        $model['rows'] = $this->getD()->getTableRows($model['tbl_name']);

        return $model;
    }

    /**
     * 添加模型并创建数据表
     * @param array $model
     * @return array
     */
    public function add($model) {
        $Model = $this->getD();
        $model = array_map('trim', $model);
        $model['tbl_name'] = C('DB_PREFIX') . $model['tbl_name'];
        $Model->startTrans();
        $model = $Model->create($model);
        $addStatus = $Model->add($model);
        // 创建数据表
        $createTblStatus = $Model->createTable($model['tbl_name'],
                                               $model['has_pk'],
                                               $model['tbl_engine'],
                                               $model['description']);
        // 添加系统字段
        $addFieldStatus = $this->addSystemFields($Model->getLastInsID());

        // 生成菜单项
        if (isset($model['is_inner']) && 0 == $model['is_inner']) {
            $this->addMenuItem($model);
        }

        // 生成节点
        $ctrlName = $this->getCtrlName($model['tbl_name']);
        $nodeService = D('Node', 'Service');
        $amns = $nodeService->addModuleNodes($model['menu_name'], $ctrlName);

        if (false === $addStatus
            || false === $createTblStatus
            || false === $addFieldStatus
            || false === $amns) {
            $Model->rollback();
            return $this->resultReturn(false);
        }

        $Model->commit();
        return $this->resultReturn(true);
    }

    /**
     * 添加旧的数据表
     *
        COLUMNS
        当前数据库中当前用户可以访问的每一个列在该视图中占一行。INFORMATION_SCHEMA.COLUMNS 视图以 sysobjects、spt_data type_info、systypes、syscolumns、syscomments、sysconfigures 以及 syscharsets 系统表为基础。

        若要从这些视图中检索信息，请指定完全合格的 INFORMATION_SCHEMA view_name 名称。

        列名	                 数据类型            	描述
        TABLE_CATALOG	     nvarchar(128)	    表限定符。
        TABLE_SCHEMA	     nvarchar(128)	    表所有者。
        TABLE_NAME	        nvarchar(128)	    表名。
        COLUMN_NAME	        nvarchar(128)	    列名。
        ORDINAL_POSITION	smallint	        列标识号。
        COLUMN_DEFAULT	    nvarchar(4000)	    列的默认值。
        IS_NULLABLE	        varchar(3)	        列的为空性。如果列允许 NULL，那么该列返回 YES。否则，返回 NO。
        DATA_TYPE	        nvarchar(128)	    系统提供的数据类型。
        CHARACTER_MAXIMUM_LENGTH	smallint	以字符为单位的最大长度，适于二进制数据、字符数据，或者文本和图像数据。否则，返回 NULL。有关更多信息，请参见数据类型。
        CHARACTER_OCTET_LENGTH	smallint	    以字节为单位的最大长度，适于二进制数据、字符数据，或者文本和图像数据。否则，返回 NULL。
        NUMERIC_PRECISION	    tinyint	        近似数字数据、精确数字数据、整型数据或货币数据的精度。否则，返回 NULL。
        NUMERIC_PRECISION_RADIX	smallint	    近似数字数据、精确数字数据、整型数据或货币数据的精度基数。否则，返回 NULL。
        NUMERIC_SCALE	        tinyint	        近似数字数据、精确数字数据、整数数据或货币数据的小数位数。否则，返回 NULL。
        DATETIME_PRECISION	    smallint	    datetime 及 SQL-92 interval 数据类型的子类型代码。对于其它数据类型，返回 NULL。
        CHARACTER_SET_CATALOG	varchar(6)	    如果列是字符数据或 text 数据类型，那么返回 master，指明字符集所在的数据库。否则，返回 NULL。
        CHARACTER_SET_SCHEMA	varchar(3)	    如果列是字符数据或 text 数据类型，那么返回 DBO，指明字符集的所有者名称。否则，返回 NULL。
        CHARACTER_SET_NAME	    nvarchar(128)	如果该列是字符数据或 text 数据类型，那么为字符集返回唯一的名称。否则，返回 NULL。
        COLLATION_CATALOG	    varchar(6)	    如果列是字符数据或 text 数据类型，那么返回 master，指明在其中定义排序次序的数据库。否则此列为 NULL。
        COLLATION_SCHEMA	    varchar(3)	    返回 DBO，为字符数据或 text 数据类型指明排序次序的所有者。否则，返回 NULL。
        COLLATION_NAME	        nvarchar(128)	如果列是字符数据或 text 数据类型，那么为排序次序返回唯一的名称。否则，返回 NULL。
        DOMAIN_CATALOG	        nvarchar(128)	如果列是一种用户定义数据类型，那么该列是某个数据库名称，在该数据库名中创建了这种用户定义数据类型。否则，返回 NULL。
        DOMAIN_SCHEMA	        nvarchar(128)	如果列是一种用户定义数据类型，那么该列是这种用户定义数据类型的创建者。否则，返回 NULL。
        DOMAIN_NAME	            nvarchar(128)	如果列是一种用户定义数据类型，那么该列是这种用户定义数据类型的名称。否则，返回 NULL。
     * @param $model
     * @return array
     */
    public function add_old_table($model) {
        $Model = $this->getD();
        $model = array_map ( 'trim', $model );

        $new_db = $model ['db_name'];
        $new_table = $model ['tbl_name_old'];
        $model ['tbl_name'] = $model ['db_name'].'.'.$model ['tbl_name_old'];

        $Model->startTrans ();
        $model = $Model->create ( $model );
        $addStatus = $Model->add ( $model );

        $sql = "SELECT `COLUMN_NAME`,DATA_TYPE,COLUMN_COMMENT,COLUMN_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_PRECISION_RADIX,NUMERIC_SCALE FROM information_schema.columns WHERE table_schema ='".$new_db."' AND table_name = '".$new_table."'";
        $table_attribute = $Model->query ( $sql );
        $modelId = $Model->getLastInsID ();

        $fieldService = D ( 'Field', 'Service' );
        $inputService = D('input', 'Service');

        //查询此表主键
        $qu_key['name'] = $model ['tbl_name'];

        foreach ( $table_attribute as $ke => $val ) {
            $column_name = $val ['COLUMN_NAME'];
            $comment = $val ['COLUMN_COMMENT'];
            $model_name = $model ['tbl_name'];
            $length = "";
<commit_msg>准备更新模型创建部分<commit_after><?php
namespace Home\Service;

/**
 * ModelService
 */
class ModelService extends CommonService {
    /**
     * 得到数据模型的详细信息
     * @param  array $where   查询条件
     * @param  string $fields 插叙字段
     * @return array
     */
    public function getPagination($where, $fields,$order,$firstRow,$listRows) {
        $models = parent::getPagination($where, 
                                        $fields,
                                        $order,
                                        $firstRow,
                                        $listRows);
        foreach ($models as $key => $model) {
            // 模型拥有的字段数目
            $models[$key]['fields_count'] = count($model['fields']);
            // 记录行数
            $rows = D('Common')->getTableRows($model['tbl_name']);
            $models[$key]['rows'] = $rows;
        }

        return $models;
    }

    /**
     * 得到所有的模型
     * @param  string $fields 查询字段
     * @param  string  $order 排序
     * @return array
     */
    public function getAll($fields, $order) {
        return $this->getPagination(null, $fields, $order, null, null);
    }

    /**
     * 按id得到model数据
     * @param  int     $id
     * @return array
     */
    public function getById($id) {
        $model = $this->getD()->relation(true)->getById($id);
        if (empty($model)) {
            return null;
        }

        $model['fields_count'] = count($model['fields']);
        $model['rows'] = $this->getD()->getTableRows($model['tbl_name']);

        return $model;
    }

    /**
     * 添加模型并创建数据表
     * @param array $model
     * @return array
     */
    public function add($model) {
        $Model = $this->getD();
        $model = array_map('trim', $model);
        $model['tbl_name'] = C('DB_PREFIX') . $model['tbl_name'];
        $Model->startTrans();
        $model = $Model->create($model);
        $addStatus = $Model->add($model);
        // 创建数据表
        $createTblStatus = $Model->createTable($model['tbl_name'],
                                               $model['has_pk'],
                                               $model['tbl_engine'],
                                               $model['description']);
        // 添加系统字段
        $addFieldStatus = $this->addSystemFields($Model->getLastInsID());

        // 生成菜单项
        if (isset($model['is_inner']) && 0 == $model['is_inner']) {
            $this->addMenuItem($model);
        }

        // 生成节点
        $ctrlName = $this->getCtrlName($model['tbl_name']);
        $nodeService = D('Node', 'Service');
        $amns = $nodeService->addModuleNodes($model['menu_name'], $ctrlName);

        if (false === $addStatus
            || false === $createTblStatus
            || false === $addFieldStatus
            || false === $amns) {
            $Model->rollback();
            return $this->resultReturn(false);
        }

        $Model->commit();
        return $this->resultReturn(true);
    }

    /**
     * 添加旧的数据表
     *
        COLUMNS
        当前数据库中当前用户可以访问的每一个列在该视图中占一行。INFORMATION_SCHEMA.COLUMNS 视图以 sysobjects、spt_data type_info、systypes、syscolumns、syscomments、sysconfigures 以及 syscharsets 系统表为基础。

        若要从这些视图中检索信息，请指定完全合格的 INFORMATION_SCHEMA view_name 名称。

        列名	                 数据类型            	描述
        TABLE_CATALOG	     nvarchar(128)	    表限定符。
        TABLE_SCHEMA	     nvarchar(128)	    表所有者。
        TABLE_NAME	        nvarchar(128)	    表名。
        COLUMN_NAME	        nvarchar(128)	    列名。
        ORDINAL_POSITION	smallint	        列标识号。
        COLUMN_DEFAULT	    nvarchar(4000)	    列的默认值。
        IS_NULLABLE	        varchar(3)	        列的为空性。如果列允许 NULL，那么该列返回 YES。否则，返回 NO。
        DATA_TYPE	        nvarchar(128)	    系统提供的数据类型。
        CHARACTER_MAXIMUM_LENGTH	smallint	以字符为单位的最大长度，适于二进制数据、字符数据，或者文本和图像数据。否则，返回 NULL。有关更多信息，请参见数据类型。
        CHARACTER_OCTET_LENGTH	smallint	    以字节为单位的最大长度，适于二进制数据、字符数据，或者文本和图像数据。否则，返回 NULL。
        NUMERIC_PRECISION	    tinyint	        近似数字数据、精确数字数据、整型数据或货币数据的精度。否则，返回 NULL。
        NUMERIC_PRECISION_RADIX	smallint	    近似数字数据、精确数字数据、整型数据或货币数据的精度基数。否则，返回 NULL。
        NUMERIC_SCALE	        tinyint	        近似数字数据、精确数字数据、整数数据或货币数据的小数位数。否则，返回 NULL。
        DATETIME_PRECISION	    smallint	    datetime 及 SQL-92 interval 数据类型的子类型代码。对于其它数据类型，返回 NULL。
        CHARACTER_SET_CATALOG	varchar(6)	    如果列是字符数据或 text 数据类型，那么返回 master，指明字符集所在的数据库。否则，返回 NULL。
        CHARACTER_SET_SCHEMA	varchar(3)	    如果列是字符数据或 text 数据类型，那么返回 DBO，指明字符集的所有者名称。否则，返回 NULL。
        CHARACTER_SET_NAME	    nvarchar(128)	如果该列是字符数据或 text 数据类型，那么为字符集返回唯一的名称。否则，返回 NULL。
        COLLATION_CATALOG	    varchar(6)	    如果列是字符数据或 text 数据类型，那么返回 master，指明在其中定义排序次序的数据库。否则此列为 NULL。
        COLLATION_SCHEMA	    varchar(3)	    返回 DBO，为字符数据或 text 数据类型指明排序次序的所有者。否则，返回 NULL。
        COLLATION_NAME	        nvarchar(128)	如果列是字符数据或 text 数据类型，那么为排序次序返回唯一的名称。否则，返回 NULL。
        DOMAIN_CATALOG	        nvarchar(128)	如果列是一种用户定义数据类型，那么该列是某个数据库名称，在该数据库名中创建了这种用户定义数据类型。否则，返回 NULL。
        DOMAIN_SCHEMA	        nvarchar(128)	如果列是一种用户定义数据类型，那么该列是这种用户定义数据类型的创建者。否则，返回 NULL。
        DOMAIN_NAME	            nvarchar(128)	如果列是一种用户定义数据类型，那么该列是这种用户定义数据类型的名称。否则，返回 NULL。
     * @param $model
     * @return array
     */
    public function add_old_table($model) {
        $Model = $this->getD();
        $model = array_map ( 'trim', $model );

        $new_db = $model ['db_name'];
        $new_table = $model ['tbl_name_old'];
        $model ['tbl_name'] = $model ['db_name'].'.'.$model ['tbl_name_old'];

        $Model->startTrans ();
        $model = $Model->create ( $model );
        $addStatus = $Model->add ( $model );

        $sql = "SELECT `COLUMN_NAME`,DATA_TYPE,COLUMN_COMMENT,COLUMN_TYPE FROM information_schema.columns WHERE table_schema ='".$new_db."' AND table_name = '".$new_table."'";
        $table_attribute = $Model->query ( $sql );
        $modelId = $Model->getLastInsID ();

        $fieldService = D ( 'Field', 'Service' );
        $inputService = D('input', 'Service');

        //查询此表主键
        $qu_key['name'] = $model ['tbl_name'];

        foreach ( $table_attribute as $ke => $val ) {
            $column_name = $val ['COLUMN_NAME'];
            $comment = $val ['COLUMN_COMMENT'];
            $model_name = $model ['tbl_name'];
            $length = "";
            if(preg_match('/\d+/',$val['COLUMN_TYPE'], $arr)){
                $length = $arr[0];
            }
{'fraction_non_alphanumeric': 0.12904750649964547, 'fraction_numerical': 0.006696604427637281, 'mean_word_length': 2.06248492159228, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 61, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 22, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1201608', 'n_tokens_mistral': 4955, 'n_tokens_neox': 5135, 'n_words': 690}