La sentencia if-else, es talvez una de las instrucciones más usadas en proyectos electrónicos usando el lenguaje Python. también, la lógica bit a bit (bitwise) es muy usada, especialmente sobre las entradas y salidas digitales de la tarjeta Raspberry PI4B. de ahí, la importancia de conocer cómo utilizarlas en el lenguaje Python. En este capítulo estudiaremos la sentencia if-else y la lógica bit a bit.

 

Como visto en el capitulo anterior, con la lenguaje Python podemos controlar las entradas/salidas digitales de la tarjeta Raspberry Pi4B. Tambien, podemos controlar los perifericos de comunicación como: puerto serial, puerto I2C y puerto SPI. Es necesario conocer las sentencia “if-else” y la logica bit a bit (bitwise) de la lenguaje Python, para hacer lecturas de las entradas digitales y control sobre salidas digitales y perifericos. Observa la siguiente figura, donde desde Python controlamos la CPU y desde la CPU, controlamos las entradas/salidas de la tarjeta Raspberry Pi4B.

 


| Clique na imagem para ampliar |

 

 

Normalmente las instrucciones que hay dentro de la memoria de instrucciones de un microcontrolador, son ejecutadas en forma secuencial, es decir, se ejecuta una después de otra y así sucesivamente. Mas en la mayoría de los circuitos que usan microcontroladores, es necesario romper esta secuencia, para poder hacer inteligentes los proyectos. Las sentencias: “if”, “else” y “elif”, nos permiten romper la secuencia de ejecución de instrucciones como veremos en este capítulo.

 

 La lógica de programación es muy similar al comportamiento humano ante la vida. Por ejemplo, si está lloviendo, es muy probable que la mayoría de las personas, lleven un paraguas, caso vayan a salir de casa. O si una persona tiene sed, buscar agua para beber. En los microcontroladores es muy similar la lógica, como veremos en este capítulo. Para el desarrollo de los ejemplos y prácticas de este capítulo, he usado el editor: “Visual Studio Code”, como se muestra en la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Existen muchos editores y ambientes de desarrollo para Python. Puede usar cualquiera de ellos, pues los ejemplos mostrados en este capitulo son compatibles con estos ambientes.

La siguiente es una lista de las instrucciones usadas para testar una condición:

 

If

elif

else

 

La siguiente figura muestra las partes del procesador Raspberry Pi4B, afectadas por estas instrucciones:

  

 


| Clique na imagem para ampliar |

 

 

 

LA SENTENCIA: if.

 

La sentencia o instrucción “if”, puede ser entendida como: “si sucede algo, haga esto”. Por ejemplo, veamos el siguiente programa en Python:

 


 

 

 

 Esta instrucción condicional, está diciendo: si la temperatura es mayor a 17 grados centígrados, ejecute el bloque de código:

 

 


 

 

 

 

El anterior programa dará en la consola de salida, el siguiente resultado:

 


 

 

 

 Con este ejemplo, podemos ver las infinitas posibilidades de testar los valores de variables numéricas. La siguiente imagen muestra un diagrama de flujo para la sentencia: “if”.

 


 

 

 

 

LA SENTENCIA: if….else

Esta instrucción permite ejecutar un “bloque de código”, caso la “condición” se cumpla y otro “bloque de código” caso la “condición”, no se cumpla. Por ejemplo, el siguiente programa imprime en la consola: “hot environment”, si la temperatura es mayor a 17 grados centrigrados. Si, la temperatura es: menor o igual a 17, se imprime en la consola: “cold environment”. Esta sentencia puede ser entendida como: “Si se cumple la condición, haga esto, caso contrario, entonces, haga otra cosa”.

 

 


 

 

 

El anterior programa dará en la consola de salida, el siguiente resultado: hot environment

 

En el siguiente programa, podemos notar, que la sentencia: “if temperatura > 17”, no se cumple, porque, la variable: “temperature”, no es mayor a 17.

 


 

 

 

El anterior programa dará en la consola de salida, el siguiente resultado: 

 

 

La siguiente imagen muestra un diagrama de flujo para la sentencia: “if-else”.

 

 


 

 

 

 

LA SENTENCIA: if….elif….else

Esta instrucción permite ejecutar un “bloque de código”, caso la “condición” se cumpla y descartar los otros “bloques de código”, caso la “condición”, no se cumpla. Por ejemplo, el siguiente programa imprime en la consola: “normal environment”, si la temperatura es mayor o igual a 12 y menor a 20 grados centígrados:

 

 


 

 

 

El anterior programa dará en la consola de salida, el siguiente resultado: 

 

 

 

Observa el siguiente programa:

 

 


 

 

El anterior programa dará en la consola de salida, el siguiente resultado: 

 

Así, puedes probar diferentes valores para la variable: “temperature” y observar los resultados.

 

 

 

OPERADORES LÓGICOS BIT A BIT (BITWISE)

Los tipos de operadores lógicos bit a bit en Python son: Lógica “OR”, Lógica “AND” y Lógica “XOR”. Lógica y sentido común son usados a diario, ya sea por sistemas electrónicos o personas. En este capítulo veremos la lógica: “and”, “or” y “xor”. Casi todo equipo electrónico usa lógica digital para su funcionamiento y operación, de ahí la importancia de conocer este tema. Las operaciones lógicas que hace el cerebro pueden ser consientes o subconsciente. Cuando consientes, nosotros nos damos cuenta de la operación, acción o decisión que estamos haciendo. Cuando subconsciente, nosotros no nos damos cuenta de ello, pero mismo así lo ejecutamos. La lógica y el sentido común o modo de pensar de cada persona, tiene mucha similitud.

 

Por eso el parecido entre una tarjeta como Raspberry Pi4B y la mente o celebro humano, pues las 2 pueden realizar procesos lógicos. En electrónica se realizan muchas operaciones lógicas, a tal punto que todos los sistemas electrónicos modernos la utilizan. En este artículo estudiaremos estas operaciones o instrucciones.

 

Las operaciones que veremos OR, AND y XOR, son del tipo bit a bit o bit-wise. Esto quiere decir que estas operaciones lógicas se ejecutan sobre los bits individuales de los operandos. La siguiente imagen muestra que partes del procesador son afectadas cuando se ejecutan estas instrucciones:

 


| Clique na imagem para ampliar |

 

 

 

LA LÓGICA BIT A BIT: “OR”

La instrucción lógica OR, sigue el principio de funcionamiento del circuito mostrado en la siguiente figura.

 


 

 

 

Podemos notar que, cerrando el circuito con cualquiera de los 2 interruptores, la lámpara va a encender. Mismo, si los dos interruptores están cerrados, la lámpara encenderá. Eso es la lógica OR. La única manera de que la lámpara no prenda es que los 2 interruptores estén abiertos. Así, se han creado tablas de verdad para cada instrucción lógica. En la siguiente figura podemos observar la tabla de verdad para la instrucción lógica OR.

 

 


 

 

 

Esta tabla simplifica lo dicho anteriormente acerca de la lógica OR. La siguiente figura muestra el diagrama esquemático usado para la lógica OR.

 


 

 

 

El símbolo usado en lenguaje Python, para la lógica OR, es la barra vertical (|). El siguiente programa define 2 variables (“s” y “t”) y después ejecuta una instrucción: OR sobre estas variables, dejando el resultado en la variable: “r”, después imprime el resultado en formato hexadecimal:

 


 

 

El anterior programa dará en la consola de salida, el siguiente resultado:

0xff

 

 

LA LÓGICA BIT A BIT: “AND”

La siguiente figura muestra el circuito eléctrico que representa la instrucción lógica AND. Observemos que solamente cuando los 2 interruptores están cerrados, la lámpara encenderá.

 

 


 

 

 

Casos contrarios la lámpara no encenderá. Es como si dijéramos: “La lámpara prende, solo si el interruptor A y el interruptor B, están cerrados”. La siguiente figura muestra la tabla de verdad para la lógica AND.

 


 

 

La siguiente figura muestra el símbolo de lógica:

 


 

 

 

El siguiente programa define 2 variables (“s” y “t”) y después ejecuta una instrucción: “AND” sobre estas variables, dejando el resultado en la variable: “r”, después imprime el resultado en formato hexadecimal:

 

 


 

 

 

El anterior programa dará en la consola de salida, el siguiente resultado:

0xf

 

El siguiente programa es igual al visto anteriormente, pero usa la función: “bin()” para imprimir en la consola los valores de la variable en forma hexadecimal:

 


 

 

El anterior programa dará en la consola de salida, el siguiente resultado:


 

 

Como visto anteriormente en otro capítulo, este tipo de operaciones también las podemos hacer en lenguaje ensamblador. El siguiente es un programa que ejecuta la instrucción: “AND” en ensamblador:

 


| Clique na imagem para ampliar |

 

 

 

 

LA LÓGICA BIT A BIT: “XOR”

La lógica “XOR” es también conocida como OR ESCLUSIVA, es decir que solamente cuando una de las entradas este a “uno” (1), la salida también estará a “uno” (1). Vea la tabla de verdad en la siguiente figura.

 


 

 

 Si las 2 entradas están a nivel alto (1), la salida estará a nivel bajo (0). También, si las 2 entradas están a nivel bajo (0), la salida estará a nivel bajo (0). El diagrama esquemático para la lógica XOR se puede observar en la siguiente figura:

 


 

 

 

El símbolo usado para representar la instrucción XOR en el lenguaje Python, es el símbolo de intercalación (^). En la siguiente figura podemos ver un ejemplo de XOR a nivel de byte.

 


 

 

 

 Veamos el siguiente programa en Python:

 

 


 

 

El anterior programa dará en la consola de salida, el siguiente resultado:

 


 

 

 

 

 

Conclusión

Como podemos notar, hacer uso de la sentencia “if-else”, es muy sencillo en el lenguaje Python. También, el uso de la lógica bit a bit (bitwise) es de fácil comprensión. La lógica es un lenguaje universal y sigue principios simples de entender. En los microcontroladores y sistemas digitales, es muy usada la lógica digital. Puede probar y verificar los resultados en la salida de la consola del editor Python que este usando. El uso del función: “bin()”, es muy útil para imprimir datos en forma binaria y el uso de la función: “hex()” para imprimir datos en forma hexadecimal.

 

18.989MBMemory Usage42.74msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.20
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
array:1 [ "c2123392c06423339225f3431360b7e6" => "76lqs2t7ammun5tnertgg4r554" ]
$_SERVER
array:52 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 2 "timer" => array:3 [ "start" => 1751687544 "last" => 1751687544...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.73KB) (235μs)
  • afterInitialise (1.14MB) (3.67ms)
  • afterRoute (179.16KB) (1.03ms)
  • beforeRenderComponent com_content (100.7KB) (586μs)
  • Before Access::preloadComponents (all components) (33.45KB) (240μs)
  • After Access::preloadComponents (all components) (107.06KB) (382μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (8μs)
  • After Access::preloadPermissions (com_content) (16.22MB) (21.01ms)
  • Before Access::getAssetRules (id:26974 name:com_content.article.30615) (514.65KB) (1.01ms)
  • After Access::getAssetRules (id:26974 name:com_content.article.30615) (7.38KB) (47μs)
  • afterRenderComponent com_content (434.33KB) (6.77ms)
  • afterDispatch (2.25KB) (61μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.44KB) (1.75ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (345μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (94μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (1.16ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (544μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.22KB) (69μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (187μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (49μs)
  • afterRender (281.75KB) (3.37ms)
  • 1 x After Access::preloadPermissions (com_content) (16.22MB) (49.16%)
    21.01ms
    1 x afterRenderComponent com_content (434.33KB) (15.85%)
    6.77ms
    1 x afterInitialise (1.14MB) (8.59%)
    3.67ms
    1 x afterRender (281.75KB) (7.89%)
    3.37ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.44KB) (4.09%)
    1.75ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (2.7%)
    1.16ms
    1 x afterRoute (179.16KB) (2.41%)
    1.03ms
    1 x Before Access::getAssetRules (id:26974 name:com_content.article.30615) (514.65KB) (2.36%)
    1.01ms
    1 x beforeRenderComponent com_content (100.7KB) (1.37%)
    586μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (1.27%)
    544μs
    1 x After Access::preloadComponents (all components) (107.06KB) (0.89%)
    382μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (0.81%)
    345μs
    1 x Before Access::preloadComponents (all components) (33.45KB) (0.56%)
    240μs
    1 x afterLoad (85.73KB) (0.55%)
    235μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (0.44%)
    187μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.22%)
    94μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.22KB) (0.16%)
    69μs
    1 x afterDispatch (2.25KB) (0.14%)
    61μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (0.11%)
    49μs
    1 x After Access::getAssetRules (id:26974 name:com_content.article.30615) (7.38KB) (0.11%)
    47μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.02%)
    8μs
21 statements were executed, 5 of which were duplicates, 16 unique11.19ms1.63MB
  • SELECT @@SESSION.sql_mode;35μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 158μs1.31KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • UPDATE `incbmx_session` SET `guest` = :guest , `time` = :time , `userid` = :user_id , `username` = :username , `client_id` = :client_id WHERE `session_id` = :session_id55μs992BParams/libraries/src/Session/MetadataManager.php:316Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`43μs608B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest69μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`394μs20.2KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)218μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 07.81ms1.48MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`337μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '30615'237μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)197μs46.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`199μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)276μs3.98KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`171μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC388μs4.81KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`174μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1151μs1.89KB/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)81μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context61μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)169μs46.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 172μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy