* * Returns the database information for a column. * * @param string $table The table name. * @param string $column The column name. * * @return array|null */ public function column_info( $table, $column ) { if ( empty( $table ) || empty( $column ) ) { return null; } try { $sql = \sprintf( "SHOW FULL COLUMNS FROM %s LIKE '%s'", $this->identifier( $table ), $column ); $result = $this->select_one( $sql ); if ( \is_array( $result ) ) { $result = \array_change_key_case( $result, \CASE_LOWER ); } return $result; } catch ( Exception $e ) { return null; } } /** * Adds an index. * * @param string $table_name The table name. * @param array|string $column_name The column name(s). * @param array $options Index options. * * @return bool */ public function add_index( $table_name, $column_name, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) ) { return false; } // Unique index? if ( \is_array( $options ) && \array_key_exists( 'unique', $options ) && $options['unique'] === true ) { $unique = true; } else { $unique = false; } // Did the user specify an index name? if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { $index_name = $options['name']; } else { $index_name = $this->get_index_name( $table_name, $column_name ); } if ( \strlen( $index_name ) > Constants::MYSQL_MAX_IDENTIFIER_LENGTH ) { return false; } if ( ! \is_array( $column_name ) ) { $column_names = [ $column_name ]; } else { $column_names = $column_name; } $cols = []; foreach ( $column_names as $name ) { $cols[] = $this->identifier( $name ); } $sql = \sprintf( 'CREATE %sINDEX %s ON %s(%s)', ( $unique === true ) ? 'UNIQUE ' : '', $this->identifier( $index_name ), $this->identifier( $table_name ), \implode( ', ', $cols ) ); return $this->execute_ddl( $sql ); } /** * Drops an index. * * @param string $table_name The table name. * @param array|string $column_name The column name(s). * @param array $options Index options. * * @return bool */ public function remove_index( $table_name, $column_name, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) ) { return false; } // Did the user specify an index name? if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { $index_name = $options['name']; } else { $index_name = $this->get_index_name( $table_name, $column_name ); } $sql = \sprintf( 'DROP INDEX %s ON %s', $this->identifier( $index_name ), $this->identifier( $table_name ) ); return $this->execute_ddl( $sql ); } /** * Adds timestamps. * * @param string $table_name The table name. * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return bool */ public function add_timestamps( $table_name, $created_column_name, $updated_column_name ) { if ( empty( $table_name ) || empty( $created_column_name ) || empty( $updated_column_name ) ) { return false; } $created_at = $this->add_column( $table_name, $created_column_name, 'datetime' ); $updated_at = $this->add_column( $table_name, $updated_column_name, 'timestamp', [ 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'extra' => 'ON UPDATE CURRENT_TIMESTAMP', ] ); return $created_at && $updated_at; } /** * Removes timestamps. * * @param string $table_name The table name. * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return bool Whether or not the timestamps were removed. */ public function remove_timestamps( $table_name, $created_column_name, $updated_column_name ) { if ( empty( $table_name ) || empty( $created_column_name ) || empty( $updated_column_name ) ) { return false; } $updated_at = $this->remove_column( $table_name, $created_column_name ); $created_at = $this->remove_column( $table_name, $updated_column_name ); return $created_at && $updated_at; } /** * Checks an index. * * @param string $table_name The table name. * @param array|string $column_name The column name(s). * @param array $options Index options. * * @return bool Whether or not the index exists. */ public function has_index( $table_name, $column_name, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) ) { return false; } // Did the user specify an index name? if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { $index_name = $options['name']; } else { $index_name = $this->get_index_name( $table_name, $column_name ); } $indexes = $this->indexes( $table_name ); foreach ( $indexes as $idx ) { if ( $idx['name'] === $index_name ) { return true; } } return false; } /** * Returns all indexes of a table. * * @param string $table_name The table name. * * @return array */ public function indexes( $table_name ) { $sql = \sprintf( 'SHOW KEYS FROM %s', $this->identifier( $table_name ) ); $result = $this->select_all( $sql ); $indexes = []; foreach ( $result as $row ) { // Skip primary. if ( $row['Key_name'] === 'PRIMARY' ) { continue; } $indexes[] = [ 'name' => $row['Key_name'], 'unique' => (int) $row['Non_unique'] === 0, ]; } return $indexes; } /** * Converts a type to sql. Default options: * $limit = null, $precision = null, $scale = null * * @param string $type The native type. * @param array $options The options. * * @return string The SQL type. * * @throws Exception If invalid arguments are supplied. */ public function type_to_sql( $type, $options = [] ) { $natives = $this->native_database_types(); if ( ! \array_key_exists( $type, $natives ) ) { $error = \sprintf( "Error:I dont know what column type of '%s' maps to for MySQL.", $type ); $error .= "\nYou provided: {$type}\n"; $error .= "Valid types are: \n"; $types = \array_keys( $natives ); foreach ( $types as $t ) { if ( $t === 'primary_key' ) { continue; } $error .= "\t{$t}\n"; } throw new Exception( $error ); } $scale = null; $precision = null; $limit = null; if ( isset( $options['precision'] ) ) { $precision = $options['precision']; } if ( isset( $options['scale'] ) ) { $scale = $options['scale']; } if ( isset( $options['limit'] ) ) { $limit = $options['limit']; } if ( isset( $options['values'] ) ) { $values = $options['values']; } $native_type = $natives[ $type ]; if ( \is_array( $native_type ) && \array_key_exists( 'name', $native_type ) ) { $column_type_sql = $native_type['name']; } else { return $native_type; } if ( $type === 'decimal' || $type === 'float' ) { // Ignore limit, use precison and scale. if ( $precision === null && \array_key_exists( 'precision', $native_type ) ) { $precision = $native_type['precision']; } if ( $scale === null && \array_key_exists( 'scale', $native_type ) ) { $scale = $native_type['scale']; } if ( $precision !== null ) { if ( \is_int( $scale ) ) { $column_type_sql .= \sprintf( '(%d, %d)', $precision, $scale ); } else { $column_type_sql .= \sprintf( '(%d)', $precision ); } } else { if ( $scale ) { throw new Exception( "Error adding $type column: precision cannot be empty if scale is specified" ); } } } elseif ( $type === 'enum' ) { if ( empty( $values ) ) { throw new Exception( 'Error adding enum column: there must be at least one value defined' ); } else { $column_type_sql .= \sprintf( "('%s')", \implode( "','", \array_map( [ $this, 'quote_string' ], $values ) ) ); } } // Not a decimal column. if ( $limit === null && \array_key_exists( 'limit', $native_type ) ) { $limit = $native_type['limit']; } if ( $limit ) { $column_type_sql .= \sprintf( '(%d)', $limit ); } return $column_type_sql; } /** * Adds column options. * * @param string $type The native type. * @param array $options The options. * * @return string The SQL statement for the column options. * * @throws Exception If invalid arguments are supplied. */ public function add_column_options( $type, $options ) { $sql = ''; if ( ! \is_array( $options ) ) { return $sql; } if ( \array_key_exists( 'unsigned', $options ) && $options['unsigned'] === true ) { $sql .= ' UNSIGNED'; } if ( \array_key_exists( 'character', $options ) ) { $sql .= \sprintf( ' CHARACTER SET %s', $this->identifier( $options['character'] ) ); } if ( \array_key_exists( 'collate', $options ) ) { $sql .= \sprintf( ' COLLATE %s', $this->identifier( $options['collate'] ) ); } if ( \array_key_exists( 'auto_increment', $options ) && $options['auto_increment'] === true ) { $sql .= ' auto_increment'; } if ( \array_key_exists( 'default', $options ) && $options['default'] !== null ) { if ( $this->is_sql_method_call( $options['default'] ) ) { throw new Exception( 'MySQL does not support function calls as default values, constants only.' ); } if ( \is_int( $options['default'] ) ) { $default_format = '%d'; } elseif ( \is_bool( $options['default'] ) ) { $default_format = "'%d'"; } elseif ( $options['default'] === 'CURRENT_TIMESTAMP' ) { $default_format = '%s'; } else { $default_format = "'%s'"; } $default_value = \sprintf( $default_format, $options['default'] ); $sql .= \sprintf( ' DEFAULT %s', $default_value ); } if ( \array_key_exists( 'null', $options ) ) { if ( $options['null'] === false || $options['null'] === 'NO' ) { $sql .= ' NOT NULL'; } elseif ( $type === 'timestamp' ) { $sql .= ' NULL'; } } if ( \array_key_exists( 'comment', $options ) ) { $sql .= \sprintf( " COMMENT '%s'", $this->quote_string( $options['comment'] ) ); } if ( \array_key_exists( 'extra', $options ) ) { $sql .= \sprintf( ' %s', $this->quote_string( $options['extra'] ) ); } if ( \array_key_exists( 'after', $options ) ) { $sql .= \sprintf( ' AFTER %s', $this->identifier( $options['after'] ) ); } return $sql; } /** * Returns a list of all versions that have been migrated. * * @return string[] The version numbers that have been migrated. */ public function get_migrated_versions() { $result = $this->select_all( \sprintf( 'SELECT version FROM %s', $this->get_schema_version_table_name() ) ); return \array_column( $result, 'version' ); } /** * Adds a migrated version. * * @param string $version The version. * * @return bool Whether or not the version was succesfully set. */ public function add_version( $version ) { $sql = \sprintf( "INSERT INTO %s (version) VALUES ('%s')", $this->get_schema_version_table_name(), $version ); return $this->execute_ddl( $sql ); } /** * Removes a migrated version. * * @param string $version The version. * * @return bool Whether or not the version was succesfully removed. */ public function remove_version( $version ) { $sql = \sprintf( "DELETE FROM %s WHERE version = '%s'", $this->get_schema_version_table_name(), $version ); return $this->execute_ddl( $sql ); } /** * Returns a message displaying the current version * * @return string */ public function __toString() { return self::class . ', version ' . $this->version; } /** * Returns an index name. * * @param string $table_name The table name. * @param string $column_name The column name. * * @return string The index name. */ private function get_index_name( $table_name, $column_name ) { $name = \preg_replace( '/\\W/', '_', $table_name ); $name = \preg_replace( '/\\_{2,}/', '_', $name ); // If the column parameter is an array then the user wants to create a multi-column index. if ( \is_array( $column_name ) ) { $column_str = \implode( '_and_', $column_name ); } else { $column_str = $column_name; } $name .= \sprintf( '_%s', $column_str ); return $name; } /** * Returns the type of a query. * * @param string $query The query to run. * * @return int The query type. */ private function determine_query_type( $query ) { $query = \strtolower( \trim( $query ) ); $match = []; \preg_match( '/^(\\w)*/i', $query, $match ); $type = $match[0]; switch ( $type ) { case 'select': return Constants::SQL_SELECT; case 'update': return Constants::SQL_UPDATE; case 'delete': return Constants::SQL_DELETE; case 'insert': return Constants::SQL_INSERT; case 'alter': return Constants::SQL_ALTER; case 'drop': return Constants::SQL_DROP; case 'create': return Constants::SQL_CREATE; case 'show': return Constants::SQL_SHOW; case 'rename': return Constants::SQL_RENAME; case 'set': return Constants::SQL_SET; default: return Constants::SQL_UNKNOWN_QUERY_TYPE; } } /** * Detect whether or not the string represents a function call and if so * do not wrap it in single-quotes, otherwise do wrap in single quotes. * * @param string $text The string. * * @return bool Whether or not it's a SQL function call. */ private function is_sql_method_call( $text ) { $text = \trim( $text ); if ( \substr( $text, -2, 2 ) === '()' ) { return true; } return false; } /** * Checks if a transaction is active. * * @return bool */ private function in_transaction() { return $this->in_transaction; } /** * Starts a transaction. * * @return void * * @throws Exception If a transaction was already started. */ private function begin_transaction() { global $wpdb; if ( $this->in_transaction === true ) { throw new Exception( 'Transaction already started' ); } $wpdb->query( 'START TRANSACTION' ); $this->in_transaction = true; } /** * Commits a transaction. * * @return void * * @throws Exception If no transaction was strated. */ private function commit() { global $wpdb; if ( $this->in_transaction === false ) { throw new Exception( 'Transaction not started' ); } $wpdb->query( 'COMMIT' ); $this->in_transaction = false; } /** * Rollbacks a transaction. * * @return void * * @throws Exception If no transaction was started. */ private function rollback() { global $wpdb; if ( $this->in_transaction === false ) { throw new Exception( 'Transaction not started' ); } $wpdb->query( 'ROLLBACK' ); $this->in_transaction = false; } } سرمایه گذاری - اکوفاین | مدیریتی ، مالی ، اقتصادی

دسته: سرمایه گذاری

هوش مصنوعی آینده سرمایه‌گذاری در ایران
سرمایه گذاری

چگونه هوش مصنوعی آینده سرمایه‌گذاری در ایران را شکل می‌دهد 

نقش هوش مصنوعی در تحلیل پرتفوی هوش مصنوعی با استفاده از الگوریتم‌های یادگیری ماشین، حجم زیادی از داده‌های مالی را در کسری از ثانیه پردازش می‌کند و الگوهای پنهان را آشکار می‌سازد. در بازار ایران که نوسانات ارزی و تورمی بالاست، تحلیل هوشمندانهٔ پرتفوی کمک...
قیمت نقره در حال تغییر آنچه سرمایه‌گذاران باید درباره ارزش نقره بدانند
سرمایه گذاری

قیمت نقره در حال تغییر: آنچه سرمایه‌گذاران باید درباره ارزش نقره بدانند 

تاریخچه و اهمیت نقره در بازارهای جهانی نقره از دیرباز به عنوان یکی از فلزات گرانبها و ارزشمند در تمدن بشری شناخته شده است. این فلز درخشان با قدمتی بیش از ۵۰۰۰ سال در معاملات تجاری، به عنوان پشتوانه پول و در صنایع گوناگون مورد...
عوامل تاثیرگذار بر قیمت نقره در بازار جهانی و داخلی
سرمایه گذاری

عوامل تاثیرگذار بر قیمت نقره در بازار جهانی و داخلی 

نقره به عنوان یکی از فلزات گرانبها، همواره مورد توجه سرمایه‌گذاران و فعالان اقتصادی بوده است. این فلز ارزشمند علاوه بر کاربرد در ساخت جواهرات و زیورآلات، در صنایع مختلف از پزشکی گرفته تا الکترونیک نیز مورد استفاده قرار می‌گیرد. قیمت نقره تحت تاثیر عوامل...
بیمه عمر یا سرمایه گذاری؟ کدام برای آینده مالی شما بهتر است؟
سرمایه گذاری

بیمه عمر یا سرمایه گذاری؟ کدام برای آینده مالی شما بهتر است؟ 

  در دنیای امروز، برنامه‌ریزی برای آینده مالی یکی از مهم‌ترین تصمیماتی است که هر فرد باید برای خود و خانواده‌اش بگیرد. در این میان، دو گزینه اصلی که معمولاً مورد توجه قرار می‌گیرند، بیمه عمر و سرمایه‌گذاری مستقیم هستند. در این مقاله، به بررسی...
راه‌اندازی گواهی سپرده نقره در بورس کالای ایران : فرصتی نوین برای سرمایه‌گذاری
بورس, سرمایه گذاری

راه‌اندازی گواهی سپرده نقره در بورس کالای ایران : فرصتی نوین برای سرمایه‌گذاری 

با راه‌اندازی گواهی سپرده نقره در بورس کالای ایران، فصل جدیدی در بازار سرمایه‌گذاری و معاملات نقره آغاز می‌شود. این ابزار مالی نوین که به زودی در بورس کالا عرضه خواهد شد، نمایانگر مالکیت دارندگان بر شمش‌های نقره استاندارد نگهداری شده در انبارهای بورس است....
سرمایه گذار فرشته (انجل) کیست و چه وظایفی دارد؟
سرمایه گذاری

سرمایه گذار فرشته (انجل) کیست و چه وظایفی دارد؟ 

تعریف سرمایه‌گذار فرشته و نقش آن در اکوسیستم استارتاپی سرمایه‌گذار فرشته یا Angel Investor به افراد ثروتمند و با تجربه‌ای گفته می‌شود که سرمایه شخصی خود را در استارتاپ‌های نوپا و در مراحل اولیه سرمایه‌گذاری می‌کنند. این افراد معمولاً کارآفرینان موفقی هستند که تجربه زیادی...
رکود تورمی چیست و به چه عواملی برمی گردد | راهکارهای رکورد تورمی
سرمایه گذاری, مالی

رکود تورمی چیست و به چه عواملی برمی گردد | راهکارهای رکورد تورمی 

رکود تورمی به وقوع پیوستن دو مشکل اقتصادی می‌گوید. یکی از این مشکلات، تورم است که نرخهای قیمت‌ها را بالا می‌برد و پول ملی ارزشش کاهش می‌یابد. مشکل دوم، کاهش رشد اقتصادی است که به معنای کمتر شدن سود و اشتغال مردم است. این دو...
معاملات CFD در فارکس چیست؟ چگونگی کارکرد معاملات CFD ؟
سرمایه گذاری, فارکس

معاملات CFD در فارکس چیست؟ چگونگی کارکرد معاملات CFD ؟ 

آیا تا به حال به دنبال یک فرصت هیجان‌انگیز برای سرمایه‌گذاری و کسب سود بیشتر در بازارهای مالی بوده‌اید؟ آیا می‌خواهید تجربه‌ای جدید و متفاوت از معاملات مالی را تجربه کنید؟ اگر پاسخ شما بله است، در دنیای معاملات CFD یک دریایی از فرصت‌های سرمایه‌گذاری...
معرفی سهام فملی( ملی صنايع‌ مس‌ ايران‌) + آینده بازار مس
بورس, سرمایه گذاری

معرفی سهام فملی( ملی صنايع‌ مس‌ ايران‌) + آینده بازار مس 

کانسار مس سرچشمه در جنوب غربی کرمان، اولین توده بزرگ مسی بود که به بهره‌برداری رسید. این کانسار در سال ۱۳۲۸ کشف شد، هرچند در گزارش‌های کارشناسان خارجی که در بازدید سال‌های ۱۲۷۶ تا ۱۳۲۱ صورت گرفته بود، به وجود معادن مسی در این منطقه...
فدرال رزرو چیست و تاثیر آن در بازارهای مالی
ارزهای دیجیتال, سرمایه گذاری, مالی

فدرال رزرو چیست و تاثیر فدرال رزرو بر بازارهای مالی 

در کل، ماموریت اصلی فدرال رزرو ایجاد و حفظ استقرار و پایداری در سیستم مالی و بانکی ایالات متحده و اجرای سیاست‌های پولی مناسب برای تحقق اهداف اقتصادی است. این سازمان با ارائه خدمات مالی به بانک‌های عضو خود، به دولت ایالات متحده و به...
پذیره نویسی در بورس چیست ؟ + تفاوت پذیره‌ نویسی با عرضه اولیه در بورس
بورس, سرمایه گذاری

پذیره نویسی در بورس چیست ؟ + تفاوت پذیره‌ نویسی با عرضه اولیه در بورس 

برای تعریف پذیره‌ نویسی باید بگوییم، یک فرایند است که به موجب آن افراد تامین مالی بخشی از سرمایه یک شرکت را به عهده می ‌گیرند. در واقع این فرایند پذیره نویسی در مرحله ‌ای انجام می ‌شود که شرکت هنوز تاسیس هم نشده است....
صندوق های سرمایه گذاری طلا در بورس/ مزایای و بهترین صندوق های طلا
برگزیده ها, بورس, سرمایه گذاری

صندوق های سرمایه گذاری طلا در بورس / کدام صندوق طلا بهتر است ؟ 

طلا، یکی از کالا های محبوب، جهت سرمایه گذاری، با هدف کمک به حفظ ارزش پول افراد، می باشد.صندوق های طلا (Gold Funds)‌ یک نوع از صندوق های سرمایه گذاری در بورس کالا هایی هستند  قابل معامله  که سرمایه‌های جمع‌آوری شده از مشتریان را در...
پولی رشد اقتصادی
سرمایه گذاری, مالی

بستر پولی رشد اقتصادی 

تجربه 48 کشور «پیشرفته» و «در حال توسعه» حکایت از رد یک فرض رایج در مباحث اقتصادی دارد. به استناد تجربه این کشورها بانک‌محور یا بازارمحور بودن اقتصاد رابطه مستقیمی بر رشد اقتصادی ندارد، بلکه کارایی و توسعه‌یافتگی بخش‌های تامین مالی اعم از بانک یا...
صندوق های درآمد ثابت
برگزیده ها, بورس, سرمایه گذاری

صندوق های درآمد ثابت جایگزینی مناسب برای سود بانکی 

در چندین ماه اخیر سود حساب‌های کوتاه مدت بانک‌ها به روز ماه شمار شد به این صورت که، سود ماه شمار سودی است که بر اساس کمترین ماده حساب کوتاه مدت شما در ماه به سپرده‌گذار پرداخت می‌شود به عنوان مثال فرض کنید از اول...